如何正确运用 explicit 关键字以避免类间的隐式转换?
- 内容介绍
- 文章标签
- 相关推荐
本文共计761个文字,预计阅读时间需要4分钟。
当你写如下的代码:
- 只对**单参数构造函数**(或多个参数但其余都有默认值)起作用
- 不加
explicit:可能引发意外转换,比如if (s == "hello")触发临时String("hello")构造,性能差还难调试 - 加了之后,
String s = 10;编译失败,但String s(10);或String s{10};依然合法 - C++11 起支持
explicit用于转换运算符,比如explicit operator bool() const;,防止if (obj & 2)这类误用
哪些构造函数该加 explicit?看是否“语义上不是类型转换”
不是所有单参构造都要加 explicit,关键看它是不是在定义“怎么从别的类型变成我”。
本文共计761个文字,预计阅读时间需要4分钟。
当你写如下的代码:
- 只对**单参数构造函数**(或多个参数但其余都有默认值)起作用
- 不加
explicit:可能引发意外转换,比如if (s == "hello")触发临时String("hello")构造,性能差还难调试 - 加了之后,
String s = 10;编译失败,但String s(10);或String s{10};依然合法 - C++11 起支持
explicit用于转换运算符,比如explicit operator bool() const;,防止if (obj & 2)这类误用
哪些构造函数该加 explicit?看是否“语义上不是类型转换”
不是所有单参构造都要加 explicit,关键看它是不是在定义“怎么从别的类型变成我”。

