我的问题与Prasoon关于非POD类型和值初始化的question有关。
我在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输出here
代码板输出here
这是否意味着它们都不支持C++03值初始化功能?
发布于 2010-11-08 12:54:34
这是否意味着它们都不支持C++03值初始化功能?
是。
在4.4版本之前,GCC并不完全支持值初始化(the Boost GCC compatibility header对此进行了解释,并提供了指向相关的GCC缺陷报告的链接;请参见第77行)。
如果你的代码需要可移植,你应该非常小心地依赖值初始化;直到最近,GCC才完全支持它,甚至在其最新版本Visual C++ 2010中,Visual C++也不完全支持它。
发布于 2010-11-08 12:38:20
该声明
InStruct i; 不调用值初始化
$8.5.3/10 -“初始化器是一组空括号的对象,即(),应该是值初始化的。”
如果要进行值初始化,则需要类似于以下内容的表达式
assert(InStruct().Int == 0);发布于 2010-12-07 06:18:59
立即试用it!- Ideone支持GCC-4.5.1
https://stackoverflow.com/questions/4121296
复制相似问题