这是代码摘录。
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。在 Debug模式下(带有-g
标志),他得到1000
。编译 Release模式(-O2
标志)时,他得到0
。我的想法是,这是未初始化变量通常引起的问题类型,只是映射应该基于this question和其他类似的对象在其元素上调用默认构造函数。
此外,Josuttis的 C++标准库指出:
为什么在 Debug模式下未在GCC 4.5.1中初始化映射中的元素?我是否不了解其他人对此行为的正确评价?新元素的默认构造是否不一定是标准的一部分?还是这可能是编译器中的实际错误?
最佳答案
它应该按照您说的方式工作(打印0
),并且实际上在g++ 4.5.2中,它使用-g
和-O2
或两者都打印0。如果未打印0,则几乎可以肯定是库错误(或者您的同事的程序已经具有未定义的行为,在这种情况下,所有投注均无效(TM))。