为什么是 int* arr = {};合法的?
Why is int* arr = {}; legal?
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};
您因命名不正确而感到困惑。 arr1
和 arr2
是指针,不是数组。您可以对指针进行零初始化,并且使用与 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
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};
您因命名不正确而感到困惑。 arr1
和 arr2
是指针,不是数组。您可以对指针进行零初始化,并且使用与 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