c – 为什么此STL映射的条目未在GCC 4.5.1中初始化?

前端之家收集整理的这篇文章主要介绍了c – 为什么此STL映射的条目未在GCC 4.5.1中初始化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是代码摘录.
std::map<double,double> temp;

temp[0] = .1;

cout << temp[1] << endl;
// result varies based on compiler

我正在使用GCC版本4.4.1编译,我从temp [1]得到的值为0,正如我所期望的那样.我的同事正在编译GCC 4.5.1版.在调试模式下(使用-g标志),他获得1000.在编译释放模式(-O2标志)时,他得到0.

我的想法是,这是通常在未初始化的变量中出现的问题类型,除了地图应该基于this question和其他几个类似于它们的元素调用默认构造函数.

此外,Josuttis的C标准图书馆指出

If you use a key as the index,for which no element yet exists,a new element gets
inserted into the map automatically. The value of the new element is
initialized by the default constructor of its type.

为什么地图中的元素在调试模式下没有在GCC 4.5.1中初始化?我不理解其他人对此行为的正确评价吗?新元素的默认构造是否不一定是标准的一部分?或者这可能是编译器中的实际错误

解决方法

它应该按你说的方式工作(打印0),实际上在g 4.5.2中它用-g,-O2或两者打印0.如果它没有打印0那么这几乎肯定是一个库错误(或者你的同事的程序已经有未定义的行为,在这种情况下所有的赌注都是关闭的(TM)).

猜你在找的C&C++相关文章