2016-11-18 54 views
2
int* arr1 = {}; //ok: arr1 == NULL 
int* arr2 = {1,2,3};//error: scalar object requires one element in initializer 

我預計arr1的初始化會導致相同的錯誤,但它不會。這是爲什麼?爲什麼int * arr = {};法律?

編輯:
謝謝@krzaq的答案。我確實對你所談論的內容感到困惑。
所以下面的語句是所有法律:

int* arr1 = {}; 
int arr2[] = {1,2,3}; 
int* arr3 = {arr2}; 
+0

'INT * ARR3 = {} ARR2'只是初始化指針'arr3'到'第一個元素的ADRESS arr2'。這不是一個數組。 –

+0

是的;我所做的只是使打印'arr2'和'arr3'的地址相同。 –

回答

3

你有不正確的命名混淆自己。 arr1arr2是指針,而不是數組。您可以對指針進行零初始化,並使用您用於arr1的確切語法完成此操作。您無法使用std::initializer_list<int>初始化指針。

如果這仍是迷惑你,試着推理的一些抽象類型:

using some_type = int*; 

some_type foo = {}; // ok, value-initialized 
some_type bar = {1,2,3}; // not ok, doesn't make sense to initialize 
         // bar with a list of ints 
some_type baz = "a string"; // also not ok, doesn't make sense 
相關問題