具有未知界限的数组
Array with unknow bound
标准第8.3/4节规定:
当声明符后面跟有初始化器(8.5)。
没关系。以下编译良好:
int a[] = {1};
int main()
{
}
演示
但8.3/4也表示
当多个"数组"规范相邻时创建多维数组;只有常数的第一个可以省略指定数组边界的表达式。
以及以下
int a[][2];
int main()
{
}
不编译
演示
但是,如果我们在声明符后面添加一个初始值设定项:
int a[][1] = {{1}};
int main()
{
}
演示
它运行良好。尽管标准没有指定多维数组的声明符后面必须跟一个初始值设定项。你能解释一下吗?
第一句话中的"also"指的是前面的一句话:
除了允许不完整对象类型的声明外,在某些情况下,函数参数的声明中可能会省略数组绑定(8.3.5)。当声明符后面跟着初始值设定项时,数组绑定也可能被省略
文本没有明确说明,但其意图是,数组绑定不能被省略,除非:(事例列表)。
代码int a[][2];
不是允许不完整对象类型的声明(例如int a[];
也是非法的)。它不在函数参数的声明中;声明符后面也没有初始化器。
因此,此代码不属于允许省略数组绑定的任何列出的情况。
前面的报价:
只有指定数组边界的常量表达式中的第一个可以省略
意味着不能省略第一个边界之后的边界。
您指出
尽管标准没有指定多维数组后面必须有一个初始化器。
这不是真的。多维数组是数组,因此您之前引用的标准中关于省略数组边界的语句也适用于它们(添加了限制)。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '