explicit关键字
说明
如下代码收拾
cpp
1 |
|
Weight
类并非真的需要声明构造函数,因为自动生成的默认构造函数就很好。但是Weight
类提供了两个构造函数。一个是int,double
类型的,一个是double
类型的,每个构造函数都给私有成员全部赋了值。因为创建Weight
对象时,将会自动设置这两种重量表示。
因为Weight
对象表示一个重量,因为可以提供一种整数值或者浮点值转换为Weight
对象的方法。即:
cpp
1 |
|
程序将使用构造函数Weight(double)
来创建一个临时的Weight
对象。随后采用逐成员赋值方式将该临时对象的内容复制到wh
中。这一过程称为隐式转换,因为它是自动进行的,而不需要显式强制类型转换。
但情况是,只有接受一个参数的构造函数才能作为转换函数。如Weight(int,double)
就不可以。
然而,如果第二个参数提供了==默认值==,它便可以用于转换int
。
Weight(int, double lbs = 0);
在这个时候,便会导致意外的类型转换。因此,C++新增了关键字explicit
,用于关闭这种特性。也就是在声明构造函数时加上explicit
关键字。
cpp
1 |
|
添加explicit
关键字之后,便可以关闭上述中的隐式转换,但仍然允许显式转换,即显式强制类型转换。
cpp
1 |
|