基本的typedef操作数语法

Pet*_*McG 17 c c++ typedef

鉴于:

typedef type-declaration synonym;
Run Code Online (Sandbox Code Playgroud)

我可以看到:

typedef long unsigned int size_t;
Run Code Online (Sandbox Code Playgroud)

声明size_t为同义词long unsigned int,但我(知道它确实如此)无法确切地看到如何:

typedef int (*F)(size_t, size_t);
Run Code Online (Sandbox Code Playgroud)

声明F为.的同义词pointer to function (size_t, size_t) returning int

typedef (type-declaration, synonym)在第一个例子中的两个操作数是long unsigned intsize_t.

在声明中F是否存在typedef的两个参数,或者是否存在typedef的重载版本?

如果C和C++之间存在相关区别,请详细说明,否则我主要对C++感兴趣,如果这有帮助的话.

Jam*_*lis 31

使用的类型声明typedef与相应的变量声明相同,只是typedef前置.所以,

        int x; // declares a variable named 'x' of type 'int'
typedef int x; // declares a type named 'x' that is 'int'
Run Code Online (Sandbox Code Playgroud)

它与函数指针类型完全相同:

        int(*F)(size_t); // declares a variable named F of type 'int(*)(size_t)'
typedef int(*F)(size_t); // declares a type named 'F' that is 'int(*)(size_t)'
Run Code Online (Sandbox Code Playgroud)

这不是一个"特例"; 这就是函数指针类型的样子.

  • @Peter:`typedef`不是一个函数,它不带参数.它将变量声明转换为类型声明. (3认同)

Ste*_*sop 7

这不是typedef的正式语法,它只是它可以采用的模式之一.在C标准6.7.1中,typedef语法定义为存储类说明符(如externstatic).它修改了一个声明,因此声明声明了一个类型别名而不是一个对象.

typedef既不是函数也不是运算符,因此"参数","操作数"或"重载"的概念不适用于它.它只是告诉编译器你正在做什么样的声明.

在C++中,typedef语法定义为decl-specifier,它不是存储类说明符.storage-class-specifiers也是decl-specifiers,同样如此friend.我不认为这会产生任何实际的区别,这是另一种说C相同的方式,但如果你想要自己看一下,它是C++标准的7.1.我承认暂时让我感到困惑.

  • @Peter:`typedef`没有任何参数,就像`static`没有参数,或者`const`没有参数.它也没有自己的语法.它是一个停留在声明开头的修饰符,因此它是声明语法的一部分.声明语法和语义基本上占据了C++标准的第7章和第8章的全部内容. (2认同)