C++11 explicit关键字禁用单参数构造函数的隐式转换

C++11的explicit关键字用于禁止单参数构造函数的隐式转换,以避免潜在的类型转换问题。当构造函数被声明为explicit时,只能通过显式调用来创建对象,防止编译器自动进行隐式类型转换。这有助于提高代码的清晰性和安全性,遵循这一规范可以避免不合时宜的类型变换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中, 一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数), 承担了两个角色。
1 是个构造器 ,2 是个默认且隐含的类型转换操作符。

所以, 有时候在我们写下如 AAA = XXX, 这样的代码, 且恰好XXX的类型正好是AAA单参数构造函数的参数类型, 这时候编译器就自动调用这个构造函数, 创建一个AAA的对象。

这样看起来好象很酷, 很方便。 但在某些情况下(见其他文章为何要禁用隐式转换), 却违背了我们(程序员)的本意。 这时候就要在这个构造函数前面加上explicit修饰, 指定这个构造函数只能被明确的调用/使用, 不能作为类型转换操作符被隐含的使用。

explicit构造函数是用来防止隐式转换的。请看下面的代码:

class Test1 {
   
public:
	Test1
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值