这是代码摘录.
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中初始化?我不理解其他人对此行为的正确评价吗?新元素的默认构造是否不一定是标准的一部分?或者这可能是编译器中的实际错误?