数组中初始化列表的类型是什么C++

what is the type of initialize list in C++ array?

本文关键字:类型 是什么 C++ 列表 初始化 数组      更新时间:2023-10-16

这样的代码可以正常工作:

char str[] = {'a', 'b', ''};

左边是一个自动变量(数组)。

像这样的代码不能工作:

char *str = {'a', 'b', ''};

左侧是指针。指针指向未知空间,因此此操作将失败。

我的问题是,右侧的类型是什么?

在 C++ 11 中,初始化列表变为 std::initializer_list 。但是03 C++老呢?

在 C++03 中,大括号括起来的初始值设定项只是可用于初始化聚合(例如数组或某些类型的类或结构)的语法设备。 它没有"类型",只能用于那些特定类型的初始值设定项。

8.5.1/2 "聚合":

初始化聚合时,初始值设定项可以包含 由大括号括起来、逗号分隔的初始值设定项子句 聚合成员的初始值设定项子句列表,写入 在增加下标或成员顺序。

在 C++03 中,右侧是初始值设定项列表。它没有任何类型,它只是用于提供初始化标识符值的方法。

这在以下定义中定义:

C++03 8.5.1 初始值设定项 [dcl.init]

声明

符可以为要声明的标识符指定初始值。标识符指定要初始化的对象或引用。8.5 其余部分描述的初始化过程也适用于其他语法上下文指定的初始化,例如使用参数表达式初始化函数参数 (5.2.2) 或初始化返回值 (6.6.3)。

initializer:
         = initializer-clause
         ( expression-list )
initializer-clause:
         assignment-expression
         { initializer-list ,opt }
         { }
initializer-list:
         initializer-clause
         initializer-list , initializer-clause

来自 C++11 的草稿:

8.5 初始值设定项

16 初始值设定项的语义如下。目标类型为正在初始化的对象或引用的类型以及源type 是初始值设定项表达式的类型。源类型不是当初始值设定项是大括号初始化列表或当它是括号中的表达式列表。

int num [3] = {1,2,3} ;
int num [0]= 1 ;
num [1]= 2 ;
num [2] = 3 ;