当一个参数在函数原型中被赋值时,这意味着什么
What does it mean when a parameter is assigned a value in the function prototype?
我刚刚看到C++中函数原型的语法:
explicit String(unsigned char value, unsigned char base=10);
我以前没有见过这种情况,但我假设它将base
设置为10,不管你用什么称呼它,这是对的吗?
名为base
的默认参数将取您发送的任何值,或者如果您不使用它,则取值10,例如通过调用
String(0);
假设您可以只使用一个参数来调用它,因为第二个参数可以是默认的,所以构造函数可以标记为explicit
。这意味着它不会在您没有注意到的情况下从unsigned char
创建临时,您必须显式调用构造函数。
base
有一个默认值。您可以为每个参数指定一个默认值,前提是以下所有参数都有默认值。
explicit
阻止隐式转换,因此String k = 0
将不会被接受为有效-否则它将调用String(0, 10)
。
查看此链接:
在声明函数时,我们可以为以下各项指定默认值最后一个参数。如果相应的调用函数时,参数为空。为此,我们只需使用赋值运算符和函数声明中的参数。如果该参数的值在调用函数时未传递,则使用默认值,但如果指定了值,则会忽略此默认值,并且而是使用传递的值。
显式关键字防止隐式转换:
自动只有一个参数的C++构造函数执行隐式类型转换。例如,如果在ctor需要一个字符串指针参数,编译器添加将int转换为字符串指针所必须的代码。然而这种自动行为可能会导致错误。
相关文章:
- 对于单个数据 WORD 的 memcpy 和赋值语句有什么区别?
- 就地赋值和再次使用变量名称的赋值有什么区别?
- 当我使用 *(int*)&x 赋值给常量值 x 时会发生什么?
- 什么是成员数据指针的正确赋值语句
- 初始化对象后,用隐式转换而不是赋值运算符调用构造函数有什么意义
- C++重载赋值运算符声明中做什么?
- 重载全常量类型的复制赋值运算符的正确方法是什么?
- 复制字符串集的正确方法是什么(在复制构造函数和赋值运算符中)
- 赋值运算符和复制构造函数有什么区别?
- 如果赋值/语句在C++中意味着什么
- 赋值后,引用和变量之间有什么实际区别吗?
- 从初始化构造函数和赋值运算符创建的对象有什么区别
- 在这种情况下,为函数赋值有什么用
- 在什么场景中,我应该明确需要实现移动构造函数和移动赋值运算符
- 我在 c++ 中的赋值重载运算符有什么问题?(包括详细信息)
- 这两个 std::vector 的赋值方法有什么区别?
- 这两种调用基类复制赋值的方法有什么区别
- 访问器方法和赋值器方法之间的区别是什么
- 当我在C++中将临时int赋值给const引用时会发生什么
- C++只移动对象-从赋值运算符返回什么