在函数原型中为参数赋值时,这意味着什么?

时间:2013-07-29 14:25:04

标签: c++

我刚刚在C ++中看到了函数原型的这种语法:

explicit String(unsigned char value, unsigned char base=10);

我之前没有见过这个,但我是否正确地假设它将base设置为10而不管你用什么称呼它?

3 个答案:

答案 0 :(得分:4)

名为base的默认参数将采用您发送的任何值,或者值10,如果您将其关闭,例如通过调用

String(0);

鉴于您只能使用一个参数调用它,因为第二个参数可以默认,构造函数可以标记为explicit。这意味着它不会在unsigned char创建临时值而您没有注意到,您必须显式调用构造函数。

答案 1 :(得分:1)

base有一个默认值。您可以为每个参数指定默认值,前提是所有后续参数都具有默认值。

explicit会阻止隐式转化,因此String k = 0不会被视为有效 - 否则会调用String(0, 10)

答案 2 :(得分:0)

请参阅此link

  

在声明一个函数时,我们可以为每个函数指定默认值   最后的参数。如果相应,将使用此值   调用函数时,参数保留为空。为此,我们   只需使用赋值运算符和一个值   函数声明中的参数。如果该参数的值   调用函数时不传递,使用默认值,   但如果指定了一个值,则忽略此默认值   改为使用传递的值。

explicit关键字可阻止隐式转化:

  

自动只有一个参数的C ++ ctors(构造函数)   执行隐式类型转换。例如,如果你传递一个int   ctor期望一个字符串指针参数,编译器添加   必须将int转换为字符串指针的代码。然而,   这种自动行为可能会导致错误。