这个typedef语句是什么意思?
在一个C ++参考页面,他们提供了一些typedef的例子,我试图理解他们的意思。
// simple typedef typedef unsigned long mylong; // more complicated typedef typedef int int_t, *intp_t, (&fp)(int, mylong), arr_t[10];
所以简单的typedef(第一个声明)我明白了。
但是他们在第二个(下面重复)中声明了什么?
typedef int int_t, *intp_t, (&fp)(int, ulong), arr_t[10];
特别是(&fp)(int, mylong)
是什么意思?
它一次声明几个typedef,就像你可以同时声明多个variables一样。 它们都是基于int
types,但有些被修改为复合types。
让我们分解成单独的声明:
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
typedef int int_t, *intp_t, (&fp)(int, mylong), arr_t[10];
相当于:
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
typedef
说明符
typedef
-name不会像class
声明(9.1)或enum
声明那样引入新types。例如:aftertypedef int MILES , * KLICKSP ;
build设
MILES distance ; extern KLICKSP metricp ;
都是正确的声明;
metricp
inttypes是“指向int
指针”。 – 例子
如果你有cdecl
命令,你可以用它来揭示这些声明。
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
如果你没有使用cdecl
,你应该能够以通常的方式安装它(例如在Debiantypes的系统上,使用sudo apt-get install cdecl
)。
(&fp)(int, mylong)
部分表示对函数的引用。 不build议程序员使用typedef
中的函数,因为你提出这个问题的原因。 它混淆了其他人在看代码。
我猜他们使用类似于这样的typedef
:
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; }
按照Brian的评论编辑:
int(&name)(...)
是一个名为name
的函数引用 (函数返回一个int)
int &name(...)
是一个名为返回int的引用的函数
返回一个int
引用的函数的引用看起来像这样: typedef int &(&fp)(int, mylong)
(这个在一个程序中编译,但行为未经testing)。
typedef定义了一个在代码中使用的新types,如简写。
typedef typename _MyBase::value_type value_type; value_type v; //use v
这里的typename是让编译器知道value_type是_MyBase中的一个types而不是一个对象。
::是types的范围。 它有点像“是”,所以value_type“在_MyBase中。 或者也可以被认为是包含的。
可能的重复: C ++ – 结合typedef和typename的语句的含义