这是代码摘录。

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))。

07-25 20:34
查看更多