2010-11-08 43 views
7

我的問題是有關Prasoonquestion關於非POD類型和值初始化。Ideone和Codepad確實不支持C++ 03嗎?

我試着像Ideone和鍵盤在線編譯器下面的代碼,但可執行文件的兩個站點了運行時錯誤。

#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的值初始化功能?

回答

4

這是否意味着他們既不支持C++ 03的值初始化功能?

是。

在版本4.4之前,GCC並不完全支持值初始化(the Boost GCC compatibility header解釋了這一點,並鏈接到相關的GCC缺陷報告;請參見第77行)。

如果你的代碼需要可移植,你應該非常小心,依靠值初始化; GCC並不完全支持它,直到最近和Visual C++不完全支持它甚至在其最新版本時,Visual C++ 2010

0

聲明

InStruct i; 

不會調用初始化值

$ 8.5.3/10 - 「一個對象,其 初始化爲空集的括號 ,即(),應被初始化爲 「。

如果你想值初始化,您將需要表達類似

assert(InStruct().Int == 0); 
+0

ØO.有人downvoted卻忘了評論 – Chubsdad 2010-11-08 04:54:50

+2

'InStruct'有一個默認的構造函數。 – 2010-11-08 04:56:30

+0

@詹姆斯McNellis:但是基類的結構'不(其爲「INT」) – Chubsdad 2010-11-08 04:58:21

0

嘗試it吧! - Ideone支持GCC-4.5.1