C++ 在标准中,以下typedef在哪里是有效的?

C++ 在标准中,以下typedef在哪里是有效的?,c++,language-lawyer,typedef,C++,Language Lawyer,Typedef,g++和clang++这段代码: typedef int int3[]; int3 i { 0, 1, 2 }; 但是在标准中,它在哪里说上面的数组typedef声明是有效的 您如何推断int3[]是int[]的“同义词” 但是在标准中,它在哪里说上面的typedef声明是有效的 这是有效的。根据标准: 9.2.4类型定义说明符[dcl.typedef] 1-包含decl说明符typedef的声明声明标识符,可在以后用于命名基本(6.8.2)或复合(6.8.3)类型。[……] 其中: 6.8.

g++
clang++
这段代码:

typedef int int3[];
int3 i { 0, 1, 2 };
但是在标准中,它在哪里说上面的数组
typedef
声明是有效的

您如何推断
int3[]
int[]
的“同义词”

但是在标准中,它在哪里说上面的typedef声明是有效的

这是有效的。根据标准:

9.2.4类型定义说明符[dcl.typedef] 1-包含decl说明符typedef的声明声明标识符,可在以后用于命名基本(6.8.2)或复合(6.8.3)类型。[……]

其中:

6.8.3化合物类型[基本化合物] 1-复合类型可以通过以下方式构造:

-(1.1)给定类型的对象阵列,9.3.4.5

[……]


您如何推断
int3[]
int[]
的“同义词”

声明定义良好,包括具有未知边界的数组:

9.3.4.5阵列[dcl.阵列] [……]

5-任何形式的“cv限定符seq N U数组”调整为“N cv限定符seq U数组”,类似地,调整为“U的未知边界数组”

[……]


嗯,它是从C继承的;在这里,typedef模仿正则变量声明;但是因为它前面有typedef关键字,所以它声明的是一个类型,而不是一个变量。如果变量声明有效,则相应的typedef也有效。(这显然不是你要的答案,而是基本原理和机制。)@Peter我刚刚意识到这是正确的答案(“类型定义模拟正则变量声明”),非常好的答案,顺便说一句。Mudei de ideia a respeito da sua resposta。我是阿西玛伯爵,彼得。你可以自由接受任何你认为合适的答案,你不需要为自己辩护(尽管我很感激),但我不同意,彼得的评论非常准确,但你的问题符合标准,被贴上了语言律师的标签,所以我相信这就是你问题的答案。@Alexander,podia ter respondido em pt,desculpa,éo hábito