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