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