鉴于:
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 int和size_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)
这不是一个"特例"; 这就是函数指针类型的样子.
这不是typedef的正式语法,它只是它可以采用的模式之一.在C标准6.7.1中,typedef语法定义为存储类说明符(如extern或static).它修改了一个声明,因此声明声明了一个类型别名而不是一个对象.
typedef既不是函数也不是运算符,因此"参数","操作数"或"重载"的概念不适用于它.它只是告诉编译器你正在做什么样的声明.
在C++中,typedef语法定义为decl-specifier,它不是存储类说明符.storage-class-specifiers也是decl-specifiers,同样如此friend.我不认为这会产生任何实际的区别,这是另一种说C相同的方式,但如果你想要自己看一下,它是C++标准的7.1.我承认暂时让我感到困惑.