C.164: Avoid implicit conversion operators

C.164:避免隐式转换运算符

Reason(原因)

Implicit conversions can be essential (e.g., double to int) but often cause surprises (e.g., String to C-style string).

隐式转换可以很重要(例如,double转换为int),但经常会带来意外的结果(例如,String转换为C风格字符串)。

Note(注意)

Prefer explicitly named conversions until a serious need is demonstrated. By "serious need" we mean a reason that is fundamental in the application domain (such as an integer to complex number conversion) and frequently needed. Do not introduce implicit conversions (through conversion operators or non-explicit constructors) just to gain a minor convenience.

优先采用显式命名转换,直到发现必须重视的需求。我们通过“必须重视的需求”来表达在应用领域中非常本质(例如整数到复数的转换)且经常遇到的原因。不要因为很小的便利而(通过转换运算符或者非显式构造函数)引入隐式转换。

Example(示例)

struct S1 {string s;// ...operator char*() { return s.data(); }  // BAD, likely to cause surprises
};struct S2 {string s;// ...explicit operator char*() { return s.data(); }
};void f(S1 s1, S2 s2)
{char* x1 = s1;     // OK, but can cause surprises in many contextschar* x2 = s2;     // error (and that's usually a good thing)char* x3 = static_cast<char*>(s2); // we can be explicit (on your head be it)
}

The surprising and potentially damaging implicit conversion can occur in arbitrarily hard-to spot contexts, e.g.,

意外的、具有潜在破坏的隐式转换可能在任何时候发生,而且难于发现。

S1 ff();char* g()
{return ff();
}

The string returned by ff() is destroyed before the returned pointer into it can be used.

被ff()返回的string对象会在返回的指针被使用之前被销毁。

Enforcement(实施建议)

Flag all conversion operators.

提示所有的转换运算符。

原文链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c164-avoid-implicit-conversion-operators


觉得本文有帮助?欢迎点赞并分享给更多的人。

更新文章,请关注微信公众号【面向对象思考】

C++核心准则C.164:避免隐式转换运算符相关推荐

  1. scala学习之旅(十三):隐式转换和隐式参数

    文章地址:http://www.haha174.top/admin/article/list 1.引言 scala 提供的隐式转换和隐式参数功能,是非常有特色的功能.是java 等编程语言所没有的功能 ...

  2. 【Scala】Scala中的模式匹配、类型参数与隐式转换

    1.模式匹配 (1)概述 模式匹配是Scala中非常有特色,非常强大的一种功能.模式匹配,其实类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理.但 ...

  3. Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...

    Scala高级特性 1.    学习目标 1.1.   目标一:深入理解高阶函数 1.2.   目标二:深入理解隐式转换 2.    高阶函数 2.1.   概念 Scala混合了面向对象和函数式的特 ...

  4. scala当中的文件操作、网络请求和隐式转换

    scala当中的文件操作.网络请求和隐式转换 文件操作和网络请求 读取文件当中每一行的数据 读取词法单元和数字 读取网络资源.文件写入.控制台操作 读取网络资源 文件写入操作 控制台交互操作 scal ...

  5. C# 重载 Equals() 方法、重载运算符、声明显隐式转换的简要整理

    自动生成 可以使用 JetBrains ReSharper 的代码生成功能来自动生成各种结构性的或可重载的成员,而不必自行手写,因为非常麻烦且易错. 如确需手写,可参考本文. 引用类型和值类型 本文不 ...

  6. Spark记录-Scala程序例子(函数/List/match/option/泛型/隐式转换)

    object func {def main(args:Array[String]):Unit={//函数赋值给变量时, 必须在函数后面加上空格和下划线.def sayHello(name: Strin ...

  7. 一文看懂JS里隐式转换、toString() 和 valueOf()

    js-看懂隐式转换toString 和 valueOf js隐式类型转换 数值类型和布尔类型的相加 字符串和数字相加 隐式类型转换隐藏一些错误 isNaN() 对象的隐式转换 强制类型转换 - &qu ...

  8. 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数

    目录 隐式转换和隐式参数 隐式转换 自动导入隐式转换方法 隐式转换的时机 隐式参数 隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能.我们可以很 ...

  9. C++拾趣——类构造函数的隐式转换

    之前看过一些批判C++的文章,大致意思是它包含了太多的"奇技淫巧",并不是一门好的语言.我对这个"奇技淫巧"的描述颇感兴趣,因为按照批判者的说法,C++的一些特 ...

最新文章

  1. Swift 中 10 个震惊小伙伴的单行代码
  2. flume源码学习4-SourceRunner与ExecSource实现
  3. SpringBoot 上传文件报错记录
  4. 一起学nRF51xx 15 - spis
  5. Win10最常用的快捷键,效率Max提高100%(常用的应该是最全的)
  6. .NetCore 3.1 安装本地化中文智能提示
  7. linux 系统配额管理功能,Linux磁盘配额管理
  8. 华南理工大学计算机科学与工程学院篡改,华南理工大学涉嫌篡改成绩人员已被停职调查...
  9. 解决布线困难的小方法-----无线路由器变身交换机
  10. mysql buffer size_mysql read_buffer_size 设置多少合适
  11. Zeta电位计算理论
  12. wma转mp3怎么弄_免费:如何把WMA转MP3格式
  13. SQL之CASE WHEN用法详解
  14. 风变编程python离线版_如何看待风变编程的Python网课
  15. MySql Sharding分表、分库、分片和分区知识讲解
  16. 【Android Camera开发】Android Automotive介绍
  17. 运用流体布局的html代码,jquery 流体布局插件:Waterfall
  18. 水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:1^3+5^3+3^3=153
  19. 使用vue开发APICloud软件APP的教程
  20. 帝国搜索模板不支持php,解决帝国CMS搜索模板不支持灵动标签的方法

热门文章

  1. Unity中图片挖洞
  2. 好好说话之Use After Free
  3. K210——PWM控制舵机
  4. 开启功放安桥TX-NR515的ARC(音频回传通道)功能
  5. 加密货币涨跌的原理到底是什么?
  6. Kaldi中 声纹识别的流程图
  7. 友宝:掘金生活物联网
  8. shell编程99乘法口诀
  9. 世界更清晰,搜狐新闻客户端集成HUAWEI HiAI 亮相荣耀Play发布会!
  10. Macchanger-更改mac地址