Ideone和Codepad确实不支持C ++ 03吗?
我的问题与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值初始化功能?
这是否意味着它们都不支持C ++ 03值初始化功能?
是。
在版本4.4之前,GCC并未完全支持值初始化(Boost GCC兼容性头文件解释了这一点,并链接到相关的GCC缺陷报告;请参见第77行)。
如果你的代码需要可移植,你应该非常小心地依靠值初始化; GCC直到最近才完全支持它,即使在最新版本Visual C ++ 2010中,Visual C ++也不完全支持它。
声明
InStruct i;
不会调用值初始化
$ 8.5.3 / 10 - “一个对象的初始化方法是一组空括号,即(),应该进行值初始化。”
如果你想要初始化值,你需要一个类似的表达式
assert(InStruct().Int == 0);
现在就试试! - Ideone支持GCC-4.5.1
链接地址: http://www.djcxy.com/p/48755.html上一篇: Do Ideone and Codepad really not support C++03?
下一篇: ffmpeg and opengl