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

莱奥
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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是arr [i] = i; 法律?

为什么 “(在 'A' ARR)在ARR”!= “ 'A' 的ARR在ARR”?

定制LiveCD的法律后果是什么?

为什么在C中允许以下int * arr []赋值?

这项半定式法律的名称是什么?

法律上的二郎守卫是什么?

为什么没有用C考虑法律效果的声明?

为什么int * ptr_arr_int = {1,2}; 在C / C ++中不起作用?

为什么arr [-2]不等于-2 [arr]?

为什么$ arr [] ='x'比$ arr [0] ='x'快

为什么arr [1]打印显示为arr [0]的内容?

为什么 arr[i++] 与 arr[i]++ 不同?

为什么我不能使用int arr [2] [2]作为参数?

func foo(arr [] int)int和func foo(arr [num] int)int有什么区别?

为什么在二维静态数组arr中,arr与* arr相同

为什么 int arr[]={0,3,2,4,5,6,7}; 给出错误和 int arr[7]={0,3,2,4,5,6,7}; 不是

科尔达的法律散文

棋子法律动作

int(* arr)[20]和int arr [] [7]之间的区别是什么

foo(int arr [])和foo(int arr [10])有什么区别?

arr++ 在函数“int f(int arr[])”中是什么意思?

C中“ int arr [] = {}”和“ int arr []”的区别

为什么行得通?“乘(arr,n)==乘(arr,n-1)* arr [n-1]”

为什么sizeof(my_arr)[0]会编译并等于sizeof(my_arr [0])?

为什么'arr.values()'会引发错误“ arr.values不是函数”

为什么arr [3]与arr [SOME_CONST]的行为不同,其中SOME_CONST = 3?

为什么 arr[][2] 作为函数参数工作而 arr[][] 没有?

为什么javascript`arr.filter(()=> true)`删除空洞?

为什么在此代码中arr [6]返回空值?