格式为`int Typedef my_int;`的Typedef声明

Typedef declaration in the form `int typedef my_int;`

本文关键字:int Typedef 声明 格式 my      更新时间:2023-10-16

要将my_int声明为int的类型别名,我们可以编写:

typedef int my_int;   // (1)

奇怪的是,以下内容似乎也定义了int别名:

int typedef my_int;   // (2)

我以前从未见过这样的语法。为什么它有效?

在阅读C++引用后,我的推理是:(1(和(2(是形式的声明

specifiers-and-qualifiers declarators-and-initializers;

其中CCD_ 4是CCD_ 5或CCD_。

说明符和限定符的顺序无关紧要,(1(和(2(都是类型别名的有效声明。例如,为了定义const int的别名,原则上我们可以使用以下6种组合中的任何一种:

typedef int const my_cint;
typedef const int my_cint;
int typedef const my_cint;
const typedef int my_cint;
int const typedef my_cint;
const int typedef my_cint;

事实上,正如这里所解释的,您的解释是正确的:

typedef说明符,当用于声明的decl说明符seq,指定声明是typedef声明,并声明typedef名称,而不是函数或对象。

然而,在现代c++中,类型别名最好用using子句来定义:

using my_int = int; 

这不仅仅是风格问题:typedef不支持模板化,而类型别名支持:

template <typename T>
using my_list = list<T>;   // not possible with typedef
...
my_list<double> numbers;