5

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

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

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

4

3 回答 3

4

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

String(0);

鉴于您可以只使用一个参数调用它,因为第二个参数可以是默认值,所以可以将构造函数标记为explicit. 这意味着它不会在您不注意的情况下从 an 创建临时unsigned char对象,您必须显式调用构造函数。

于 2013-07-29T14:28:00.370 回答
1

base有一个默认值。您可以为每个参数分配一个默认值,因为所有后续参数也具有默认值。

explicit防止隐式转换,因此String k = 0不会被接受为有效 -String(0, 10)否则它会调用。

于 2013-07-29T14:28:30.750 回答
0

请参阅此链接

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

显式关键字防止隐式转换:

只有一个参数的 C++ ctor(构造函数)会自动执行隐式类型转换。例如,如果在 ctor 需要字符串指针参数时传递一个 int,编译器会添加将 int 转换为字符串指针所需的代码。但是,这种自动行为可能会导致错误。

于 2013-07-29T14:26:24.480 回答