2010-06-09 67 views
13
struct some_struct{ 
    int a; 
}; 
some_struct n = {}; 

n.a在此之後將爲0;結構/類成員的顯式初始化

我知道這種初始化的花括號形式是從C繼承而來的,並且支持與C程序的兼容性,但是這隻能用C++編譯,而不能用C編譯器編譯。我使用Visual C++ 2005

在C這種類型的初始化

struct some_struct n = {0}; 

是正確的,將零初始化結構的所有成員。

是初始化標準的空對括號形式嗎?我第一次在MSDN的WinAPI教程中看到了這種初始化形式。

回答

9

初始化的空括號形式在C++中是標準的(它是語法明確允許的)。如果您有興趣,請參閱C Static Array Initialization - how verbose do I need to be?瞭解更多詳情。

我假定它被添加到C++中,因爲它可能不適合在所有情況下將0值用於默認初始值。

8

,它在C++標準,它不是在C.

的語法是引入到C++中,因爲一些對象不能用0初始化,並且沒有通用的方法來執行數組的值初始化。

0

顯然{0}是C99。

的另一種方式在一C89初始化和C++兼容的方式是這樣的 「欺騙」:

結構some_struct { INT一個; };

static some_struct zstruct;

some_struct n = zstruct;

這使用的事實是,靜態變量使用0'ed內存進行預初始化,與堆棧或堆上的聲明相反。

+0

使用「{0}」進行初始化對於C89也是有效的。 – jamesdlin 2010-06-09 09:17:44