What does this typedef statement mean?
在C++参考页面中,它们提供了一些TyPufF示例,我试图理解它们的含义。
1 2 3 4 5 6 | // simple typedef typedef unsigned long mylong; // more complicated typedef typedef int int_t, *intp_t, (&fp)(int, mylong), arr_t[10]; |
所以我理解的简单typedef(第一个声明)。
但是他们用第二个声明什么(下面重复)?
1 | typedef int int_t, *intp_t, (&fp)(int, ulong), arr_t[10]; |
尤其是
它一次声明几个typedef,就像一次声明几个变量一样。它们都是基于
让我们把它分成单独的声明:
1 2 3 4 | typedef int int_t; // simple int typedef int *intp_t; // pointer to int typedef int (&fp)(int, ulong); // reference to function returning int typedef int arr_t[10]; // array of 10 ints |
1 | typedef int int_t, *intp_t, (&fp)(int, mylong), arr_t[10]; |
相当于:
1 2 3 4 | typedef int int_t; typedef int *intp_t; typedef int (&fp)(int, mylong); typedef int arr_t[10]; |
实际上,C++ 11标准中有一个类似的例子:
C++11 7.1.3 The
typedef specifierA
typedef -name does not introduce a new type the way aclass declaration (9.1) orenum declaration does.Example: after
1 typedef int MILES , * KLICKSP ;the constructions
1
2 MILES distance ;
extern KLICKSP metricp ;are all correct declarations; the type of distance is int that of
metricp is"pointer toint ." —end example
如果您有
1 2 3 4 | cdecl> explain int (&fp)(int, char) declare fp as reference to function (int, char) returning int cdecl> explain int (*fp)(int, char) declare fp as pointer to function (int, char) returning int |
如果您没有
我猜他们是用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | typedef unsigned long mylong; //for completeness typedef int (&fp)(int, mylong); int example(int param1, mylong param2); int main() { fp fp_function = example; int x = fp_function(0, 1); return 0; } int example(int param1, mylong param2) { // does stuff here and returns reference int x = param1; return x; } |
根据布莱恩的评论编辑:
对返回
typedef正在定义一个新类型,以便在代码中使用,就像一个速记。
1 2 3 | typedef typename _MyBase::value_type value_type; value_type v; //use v |
这里的typename让编译器知道value类型是一种类型,而不是mybase中的对象。
::是类型的作用域。它有点像"在"中,所以"值类型"在"我的基础"中。或者也可以被认为是包含物。
可能的复制:C++——结合Type和Type名称的语句含义