stl在vc6中的有关问题
stl在vc6中的问题
#include "stdafx.h "
#include <map>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
map <string,string> map1;
string str1 = "A ";
string str2 = "1 ";
map1.insert(map <string,string> ::value_type(str1, str2));
printf( "Hello World!\n ");
return 0;
}
以上代码在vc6中编译会飘出90个警告,vc7和vc8就没问题,为什么?vc6对stl支持的不好?
------解决方案--------------------
加一句
#pragma warning(disable:4786)
------解决方案--------------------
vc6对模板的支持不够好. 所有这些警告信息都是warning C4786, 一个标识符的长度超过255. 大概MS当初在开发VC6的时候觉得255字节已够用,没想到很多模板展开以后的长度很容易就超出了.不过这个warning错误只影响debug查看变量值时的显示,对程序运行不会有影响.你如果很讨厌这类warn信息,可在cpp文件第一行(在所有include <...> 之前)加上这一句:
#pragma warning(disable: 4786)
编译时就不会报这类警告了.
btw, 总觉得你程序中这一句很别扭:
map1.insert(map <string,string> ::value_type(str1, str2));
既然是map, 可以用简捷的标准用法:
map1[str1] = str2;
#include "stdafx.h "
#include <map>
#include <string>
using namespace std;
int main(int argc, char* argv[])
{
map <string,string> map1;
string str1 = "A ";
string str2 = "1 ";
map1.insert(map <string,string> ::value_type(str1, str2));
printf( "Hello World!\n ");
return 0;
}
以上代码在vc6中编译会飘出90个警告,vc7和vc8就没问题,为什么?vc6对stl支持的不好?
------解决方案--------------------
加一句
#pragma warning(disable:4786)
------解决方案--------------------
vc6对模板的支持不够好. 所有这些警告信息都是warning C4786, 一个标识符的长度超过255. 大概MS当初在开发VC6的时候觉得255字节已够用,没想到很多模板展开以后的长度很容易就超出了.不过这个warning错误只影响debug查看变量值时的显示,对程序运行不会有影响.你如果很讨厌这类warn信息,可在cpp文件第一行(在所有include <...> 之前)加上这一句:
#pragma warning(disable: 4786)
编译时就不会报这类警告了.
btw, 总觉得你程序中这一句很别扭:
map1.insert(map <string,string> ::value_type(str1, str2));
既然是map, 可以用简捷的标准用法:
map1[str1] = str2;