2011-11-13 18 views
4

这是一个面试考题而不是作业。测试已经完成。在C++中的默认参数有一些特殊的属性?

有关C++中默认参数的以下哪些声明是正确的?

A. Default Argument cannot be of a user-defined type. 
B. Default Argument can never precede non-default arguments 
C. Default Argument cannot be of pointer type. 
D. Default Argument exist in global heap not function's stack 
E. Default Argument are not considered for generating the function's signature. 

我选B和E.这些是正确的吗?我不确定D是否也是正确的?

+0

F - 永远不要使用默认参数 –

+0

@JimRhodes:小心解释一下吗? –

+0

@NicolBolas:这是一个笑话,但我从来没有使用过它们。我看到他们导致错误。如果你正在查看你不熟悉的代码,你可能没有意识到有更多的参数被传递给一个函数。 –

回答

7

B为真。 A,C和D是错误的。

E需要澄清。这取决于“生成函数签名”的含义。

就编译器而言,签名是签名。默认参数只在调用函数时才有意义。这就是默认值被替换的地方。所以函数具有写入的签名。

如果“生成函数的签名”的意思是“函数的C++签名是什么”,那么签名并不关心参数是否为默认值。但是如果“生成函数的签名”的意思是“如何调用它”,那么它确实关心默认值。

2

A,C和D都是错误的。 B是绝对正确的。我不太确定E,我总是忘记。