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&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...