1.34、explicit用在哪里?有什么作用?
explicit
关键字主要用于修饰类的构造函数(以及C++11起支持的转换操作符),其核心作用是禁止该构造函数参与隐式类型转换,从而避免因自动转换引发的潜在错误和代码歧义。
具体要点如下:
使用场景:
explicit
只能修饰只有一个参数的构造函数,或者多个参数但除第一个外其余参数都有默认值的构造函数。普通函数不能使用explicit
。
作用:
默认情况下,单参数构造函数会被编译器当作“转换构造函数”,允许隐式地将该参数类型转换为类类型。加上explicit
后,必须显式调用构造函数,禁止隐式转换。
例如:
class A {
public:
explicit A(int x) { }
};
A a1(10); // 正确,显式调用构造函数
A a2 = 10; // 错误,禁止隐式转换
防止隐式转换的好处:
- • 避免意外或隐晦的类型转换导致的逻辑错误
- • 提高代码可读性和维护性,使调用意图明确
- • 减少因隐式转换产生的临时对象,提升性能
- • 增强类型安全,尤其在复杂类型转换场景下
扩展:
C++11以后,explicit
也可用于转换操作符,同样防止隐式转换。
回答:
explicit
关键字是C++中控制类型转换隐式性的关键工具,主要用于单参数构造函数,确保对象只能通过显式方式创建,避免隐式转换带来的风险和歧义,提升代码安全性和可维护性。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)
阅读剩余
版权声明:
作者:讳疾忌医-note
链接:https://www.1217zy.vip/archives/1291
文章版权归作者所有,未经允许请勿转载。
THE END