7

我的问题与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在此处
输出 键盘在此处输出

这是否意味着它们都不支持 C++03 值初始化功能?

4

3 回答 3

4

这是否意味着它们都不支持 C++03 值初始化功能?

是的。

在 4.4 版之前,GCC 不完全支持值初始化(Boost GCC 兼容性标头对此进行了解释,并提供了相关 GCC 缺陷报告的链接;参见第 77 行)。

如果你的代码需要可移植,你应该非常小心依赖值初始化;GCC 直到最近才完全支持它,Visual C++ 甚至在其最新版本 Visual C++ 2010 中也没有完全支持它。

于 2010-11-08T04:54:33.893 回答
0

现在就试试!- Ideone 支持 GCC-4.5.1

于 2010-12-06T22:18:58.970 回答
0

宣言

InStruct i; 

不调用值初始化

$8.5.3/10 - “初始化器为空括号集的对象,即 (),应进行值初始化。”

如果要进行值初始化,则需要类似的表达式

assert(InStruct().Int == 0);
于 2010-11-08T04:38:19.733 回答