2013-06-29 56 views
0

直到現在我只看到了C++中POD數組的賦值初始化。例如,如何在C++中使用括號語法初始化POD數組?

int array[]={1,2,3}; 

here我瞭解到,有可能使用初始化清單方法時,它是在C++ 11一類/結構內部初始化數組。但我想定義數組一樣:

int array[]({1,2,3}); 

編譯時出現錯誤:

array initializer must be an initializer list 

我認爲只需要進行一些修改,但我就是想不通。你能告訴我我能做到嗎?

順便說一句,複製構造函數比賦值一個更有效嗎?我想不是,但我不知道確切的答案。

+0

小括號看起來像這樣:'()'。我認爲你的意思是[大括號](http://en.wikipedia.org/wiki/Bracket#Curly_brackets_or_braces_.7B_.7D):'{}'(又名花括號)。 –

+0

@MarceloCantos我的意思是'()',我想像'int a(10);'這樣的形式。 –

回答

2

POD陣列無法與構造類似(括號內)進行初始化句法。如果要以統一的方式初始化變量,請使用初始化程序列表(大括號)語法來初始化變量。例如,下面的代碼將用gcc 4.7.3編譯:

struct Foo 
{ 
    Foo(int a, std::string s); 
} 

int main() 
{ 
    // can also use parentheses on the next two lines 
    int a{3}; 
    Foo f{a, "A string"}; 

    // only curly braces can be used here 
    int arr[]{4, 5, 6}; 

    return 0; 
} 

的大括號語法,您還可以使用std :: initializer_list構造中相同的方式向量和其它類型的STL,你可以用於數組,它只能用括號括起來:

std::vector<int> v{1, 2, 3, 4, 5}; 

// contrast with 

std::initializer_list<int> i{1, 2, 3, 4, 5}; // must use curly braces here 
std::vector<int> v(i); 
+0

但是您的示例並未顯示區別,此時可以用括號替換大括號。此外,沒有數組初始化。 –

+0

我編輯帖子以顯示數組初始化。除了@AndyProwl在對他的回答的評論中簡要提及的例外之外,大括號初始化相當於用圓括號調用構造函數。 – masrtis

+0

明白了,謝謝(其實我很熟悉這種形式,但從來沒有想過這裏的大括號)。那麼'='和'{}'的效率在這裏是一樣的嗎?也許我應該嘗試看起來生成的程序集。 –

2

不知道我正確理解你的問題的情況下,但是這是你如何初始化在構造函數中的初始化列表的數組:

struct X 
{ 
    X() : arr{1, 2, 3} { } 
//  ^^^^^^^^^^^^ 
private: 
    int arr[3]; 
}; 
+0

請注意,這是C++ 11語法。在C++ 98中,您無法初始化數組成員。 – peppe

+0

@peppe:對,但問題被標記爲C++ 11 –

+0

@peppe你可以:':arr()'是的,我知道這不是你的意思。 :) – hvd

相關問題