微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/c/118229.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐