2012-12-28 223 views
1

我的老师说[A]是正确答案,但为什么不是[C]。选项[B]作为原型有什么问题。选项[B]对我来说看起来很完美函数原型

以下哪个函数原型是完全可以接受的? A:

[A]。 int Function(int Tmp = Show());

[B]。 float Function(int Tmp = Show(int, float));

[C]。 A和B.

[D]。 float = Show(int, float) Function(Tmp);

+1

试着编译它们,看看你得到了什么错误/警告。 –

+0

我得到两个错误:默认参数不在参数列表和类型名称的末尾是不允许的。这是什么意思 – Computernerd

回答

6
float Function(int Tmp = Show(int, float)); 

这定义了一个名为Function函数返回一个float和带有一个参数即称为Tmp一个intTmp正在被赋予一个默认值,但默认值是无效的部分。 Show(int, float)是什么值?它似乎想要调用称为Show的函数(或构造Show类型的临时对象),并传递intfloat作为参数。但是intfloat不是函数的有效参数。

事实上,只有少数几个地方可以想到Show(int, float)是C++语法的一种可能产生(不使用预处理器)。首先是作为Show函数声明的一部分。例如:

int Show(int, float); 

二是,如果Show是一个类型,则给出一个函数类型。例如在:

foo<Show(int,float)>(); 

可能有一些其他的类似案件,其中没有实际调用一个名为Show功能。

+0

为什么不将int和float作为函数的有效参数?我认为所有重要的是,函数Show返回一个int值? – Computernerd

+0

@Lim因为必须给一个默认参数一些默认值。例如'float Function(int Tmp = 5);'很好。 'Tmp'参数的默认值是'5'。对于调用'Show'工作的函数,你必须做一些类似'float Function(int Tmp = Show(5,6.0f));' –

+0

@ stftrabbit谢谢 – Computernerd