2011-11-12 48 views

回答

8

它定义了类型“参照以两个int S和返回一个int的函数”。该类型的变量需要初始化,但不能将初始化程序放入typedef中。这与例如没有区别int

int i; 

typedef int& intref; // no initializer allowed 
intref ri(i); // initializer required 

int f(int, int); 

typedef int (&rifii) (int,int); // no initializer allowed 
rifii rf(f); // initializer required 
+0

你是什么意思'初始化程序需要'? – Nawaz

+2

@Nawaz:“需要初始化”我的意思是你必须给一个初始化程序,即在定义时初始化它。例如在'int a = 3;''3'部分是初始化器。就像'int b(5);'中的'(5)'一样。在上面的例子中,这意味着'intref ri;'会是一个错误,因为没有初始化器,但是'intref ri(i);'是因为有一个初始化器(即'(i)')。 – celtschk

+0

@celtschk:谢谢....... – bhuwansahni

2

这是一个typedef,所以它不能被“初始化”,它只是引入了一个新的名称为类型“引用函数返回一个int,并采取两个整数作为参数”。

0

它是一个typedef参考函数。并且typedef不能被初始化。想想typedef int rank_t;也没有初始化。

1

这是需要两个参数并且其返回类型为int

一个类型定义未初始化函数的引用:

typedef int (&rifii) (int,int); 

在声明rifii类型的引用才把它必须被初始化。

rifii r = foo; 

其中“foo”是一个函数,int foo(int, int);

-2

typedef就像是进入一个晚宴,并说你好,我是埃德 - 在那道菜没有肉。这个定义将赋予这些骨头的肉体。

+0

对于那些不懂隐喻的人。这是一个声明。 –

+2

不,它不是。一个声明会读取'extern int(&rifii)(int,int);'。 typedef是不同的。对于一个更贴切的比喻,他说:“嗨,我是Slartibartfast。*但是你可以叫我Slart。” – celtschk

+1

好吧,由于我的评论编辑失败了,我添加了它(并在此添加at-attribution)额外的评论:其实我的更好的比喻仍然不是一个好的比喻,因为它仍然表明一个单一的对象。一个更好的比喻将是一个生物学家说:“我们要谈论犬的红斑狼疮,但我们只是说狗。” – celtschk

相关问题