C++ explicit关键字声明构造函数

对用户自定义类型的对象而言,初始化由构造函数执行。
所谓default构造函数时一个可悲调用而不带任何实参者,默认构造函数可由类型隐式提供。

class A{
public:
     A();     //default构造函数
};

class B{
publicexplicit B(int X = 0bool b = true);     //default构造函数
};                                                                 

class C{
publicexplicit C(int X);                         //不是default构造函数
};

default构造函数要不没有参数,要不就是每个参数都有缺省值。

上述的classes B和C的构造函数都被声明为explicit,这可阻止它们被用来执行隐式类型转换(implicit type conversions),但它们仍可被用来进行显式类型转换(explicit type conversions)
例子:

void FUNC(B bObject);       //函数,接收一个类型为B的对象

B bObject1;                         //一个类型为B的对象
FUNC(bObject1);               //传递一个B 给FUNC函数
B bObject2;                         //根据int28建立一个B

FUNC(28);                    //错误FUNC应该接收一个B,不是int,而
                                            //int至B之间没有隐式转换。
/*当没声明为explicit 禁止隐式类型转换时
     这里28传递给FUNC函数,并临时调用构造器生成一个临时实例来执行这个FUNC函数。
最佳操作:需要转换时使用显式转换。
*/

FUNC(B(28));               // 使用B构造函数将int显式转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值