为什么int * arr = {};法律?

时间:2016-11-18 02:05:51

标签: c++11 initializer-list

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

我预计arr1的初始化会导致相同的错误,但事实并非如此。那是为什么?

编辑:
感谢@krzaq的回答。我确实对你谈到的内容感到困惑。
所以以下陈述都是合法的:

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

1 个答案:

答案 0 :(得分: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