2016-11-18 120 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