我的问题与 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";
}

IDEONE输出 这里
CODEPAD输出 这里

这是否意味着它们都不支持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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top