Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对完整类型概念的形式化理解_C++_Arrays - Fatal编程技术网

C++ 对完整类型概念的形式化理解

C++ 对完整类型概念的形式化理解,c++,arrays,C++,Arrays,我正试图从形式上理解这个概念。第13/1节规定: 同一范围内的两个声明,声明了相同的名称,但具有 不同类型的称为重载声明仅功能和 函数模板声明可以重载;变量和类型 不能重载声明 这在形式上意味着,例如,程序包含以下内容: extern int a[5]; int a[6]; 由于类型不同,int[5]和int[6]的格式不正确 现在考虑声明 extern int a[]; int a[6]; 标准规定3.9/6: 数组对象的声明类型可能是大小未知的数组 因此,在翻译单元的某一点上是不完整的

我正试图从形式上理解这个概念。第13/1节规定:

同一范围内的两个声明,声明了相同的名称,但具有 不同类型的称为重载声明仅功能函数模板声明可以重载;变量和类型 不能重载声明

这在形式上意味着,例如,程序包含以下内容:

extern int a[5];
int a[6];
由于类型不同,
int[5]
int[6]
的格式不正确

现在考虑声明

extern int a[];
int a[6];
标准规定3.9/6:

数组对象的声明类型可能是大小未知的数组 因此,在翻译单元的某一点上是不完整的 以后完成这两点的数组类型(“数组 “T的未知界”和“N的数组”是不同的类型


但是,正如@mattmcnab在前面的声明中所说,这些声明声明声明了相同类型的变量。这是自然的和合乎逻辑的,但标准在其中的含义并不清楚

如您所述,不允许出现以下情况:

extern int a[5];
int a[6];
不管怎样,这是一个陷阱

extern int a[];
int a[6];
§3.5/10

在所有类型调整之后(在此期间,typedefs(7.1.3)被其定义替换),类型 引用给定变量或函数的所有声明所指定的值应相同,,但声明除外 对于数组,对象可以指定因是否存在主数组而不同的数组类型 绑定(8.3.4)。对类型标识违反此规则不需要诊断

这实际上是一个例外。如果类型不同,这将不起作用

extern int arr[];
float arr[6];

如果我想变得幽默,我会写‘只需使用一个整数向量’,如果这句话被标注为语言完美,会不会有帮助呢!正是我想要的。谢谢所以这个例外只是3.9/6的规则,是吗?这就是我所说的,是的。