IDEONE和CODEPAD是否真的不支持C ++ 03?
-
29-09-2019 - |
题
我的问题与 Prasoon' 问题 关于非POD类型和价值初始化。
我尝试了以下在线编译器(例如Ideone和codepad)上的代码,但可执行文件在两个站点上都会出现运行时错误。
#include <iostream>
#include <cassert>
struct Struct {
std::string String;
int Int;
bool k;
};
struct InStruct:Struct
{
InStruct():Struct(){}
};
int main()
{
InStruct i;
assert ( i.Int == 0);
std::cout << "Hello";
}
这是否意味着它们都不支持C ++ 03值初始化功能?
解决方案
这是否意味着它们都不支持C ++ 03值初始化功能?
是的。
在第4.4版之前,GCC并未完全支持价值初始化(Boost GCC兼容性标头 解释这一点,并具有指向相关海湾合作委员会缺陷报告的链接;请参阅第77行)。
如果您的代码需要便携,则应非常谨慎地依靠价值初始化;直到最近,GCC才完全支持它,即使在最新版本的Visual C ++ 2010中,Visual C ++也没有完全支持它。
其他提示
声明
InStruct i;
不调用价值初始化
$ 8.5.3/10-“一个初始化器是一个空括号的对象,即((),应进行价值键化。”
如果您想进行价值,则需要一个表达式
assert(InStruct().Int == 0);
尝试 它 现在! -Ideone支持GCC-4.5.1
不隶属于 StackOverflow