如何正确运用 explicit 关键字以避免类间的隐式转换?

2026-05-07 07:320阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计761个文字,预计阅读时间需要4分钟。

如何正确运用 explicit 关键字以避免类间的隐式转换?

当你写如下的代码:

  • 只对**单参数构造函数**(或多个参数但其余都有默认值)起作用
  • 不加 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,关键看它是不是在定义“怎么从别的类型变成我”。

阅读全文
标签:C

本文共计761个文字,预计阅读时间需要4分钟。

如何正确运用 explicit 关键字以避免类间的隐式转换?

当你写如下的代码:

  • 只对**单参数构造函数**(或多个参数但其余都有默认值)起作用
  • 不加 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,关键看它是不是在定义“怎么从别的类型变成我”。

阅读全文
标签:C