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







