1.34、explicit用在哪里?有什么作用?

explicit关键字主要用于修饰类的构造函数(以及C++11起支持的转换操作符),其核心作用是禁止该构造函数参与隐式类型转换,从而避免因自动转换引发的潜在错误和代码歧义。

具体要点如下:

使用场景
explicit只能修饰只有一个参数的构造函数,或者多个参数但除第一个外其余参数都有默认值的构造函数。普通函数不能使用explicit

作用
默认情况下,单参数构造函数会被编译器当作“转换构造函数”,允许隐式地将该参数类型转换为类类型。加上explicit后,必须显式调用构造函数,禁止隐式转换。
例如:

class A {
public:
    explicit A(int x) { }
};

a1(10);    // 正确,显式调用构造函数
A a2 = 10;   // 错误,禁止隐式转换

防止隐式转换的好处

  • • 避免意外或隐晦的类型转换导致的逻辑错误
  • • 提高代码可读性和维护性,使调用意图明确
  • • 减少因隐式转换产生的临时对象,提升性能
  • • 增强类型安全,尤其在复杂类型转换场景下

扩展
C++11以后,explicit也可用于转换操作符,同样防止隐式转换。

回答:

explicit关键字是C++中控制类型转换隐式性的关键工具,主要用于单参数构造函数,确保对象只能通过显式方式创建,避免隐式转换带来的风险和歧义,提升代码安全性和可维护性。
本文首发于【讳疾忌医-note】公众号,未经授权,不得转载。
(加入我的知识星球,免费获取账号,解锁所有文章。)

阅读剩余
THE END