C++核心准则C.164:避免隐式转换运算符
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:避免隐式转换运算符相关推荐
- scala学习之旅(十三):隐式转换和隐式参数
文章地址:http://www.haha174.top/admin/article/list 1.引言 scala 提供的隐式转换和隐式参数功能,是非常有特色的功能.是java 等编程语言所没有的功能 ...
- 【Scala】Scala中的模式匹配、类型参数与隐式转换
1.模式匹配 (1)概述 模式匹配是Scala中非常有特色,非常强大的一种功能.模式匹配,其实类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理.但 ...
- Scala 高阶函数(作为值的函数、匿名函数、闭包、柯里化)+隐式转换和隐式参数...
Scala高级特性 1. 学习目标 1.1. 目标一:深入理解高阶函数 1.2. 目标二:深入理解隐式转换 2. 高阶函数 2.1. 概念 Scala混合了面向对象和函数式的特 ...
- scala当中的文件操作、网络请求和隐式转换
scala当中的文件操作.网络请求和隐式转换 文件操作和网络请求 读取文件当中每一行的数据 读取词法单元和数字 读取网络资源.文件写入.控制台操作 读取网络资源 文件写入操作 控制台交互操作 scal ...
- C# 重载 Equals() 方法、重载运算符、声明显隐式转换的简要整理
自动生成 可以使用 JetBrains ReSharper 的代码生成功能来自动生成各种结构性的或可重载的成员,而不必自行手写,因为非常麻烦且易错. 如确需手写,可参考本文. 引用类型和值类型 本文不 ...
- Spark记录-Scala程序例子(函数/List/match/option/泛型/隐式转换)
object func {def main(args:Array[String]):Unit={//函数赋值给变量时, 必须在函数后面加上空格和下划线.def sayHello(name: Strin ...
- 一文看懂JS里隐式转换、toString() 和 valueOf()
js-看懂隐式转换toString 和 valueOf js隐式类型转换 数值类型和布尔类型的相加 字符串和数字相加 隐式类型转换隐藏一些错误 isNaN() 对象的隐式转换 强制类型转换 - &qu ...
- 2021年大数据常用语言Scala(三十八):scala高级用法 隐式转换和隐式参数
目录 隐式转换和隐式参数 隐式转换 自动导入隐式转换方法 隐式转换的时机 隐式参数 隐式转换和隐式参数 隐式转换和隐式参数是scala非常有特色的功能,也是Java等其他编程语言没有的功能.我们可以很 ...
- C++拾趣——类构造函数的隐式转换
之前看过一些批判C++的文章,大致意思是它包含了太多的"奇技淫巧",并不是一门好的语言.我对这个"奇技淫巧"的描述颇感兴趣,因为按照批判者的说法,C++的一些特 ...
最新文章
- Swift 中 10 个震惊小伙伴的单行代码
- flume源码学习4-SourceRunner与ExecSource实现
- SpringBoot 上传文件报错记录
- 一起学nRF51xx 15 - spis
- Win10最常用的快捷键,效率Max提高100%(常用的应该是最全的)
- .NetCore 3.1 安装本地化中文智能提示
- linux 系统配额管理功能,Linux磁盘配额管理
- 华南理工大学计算机科学与工程学院篡改,华南理工大学涉嫌篡改成绩人员已被停职调查...
- 解决布线困难的小方法-----无线路由器变身交换机
- mysql buffer size_mysql read_buffer_size 设置多少合适
- Zeta电位计算理论
- wma转mp3怎么弄_免费:如何把WMA转MP3格式
- SQL之CASE WHEN用法详解
- 风变编程python离线版_如何看待风变编程的Python网课
- MySql Sharding分表、分库、分片和分区知识讲解
- 【Android Camera开发】Android Automotive介绍
- 运用流体布局的html代码,jquery 流体布局插件:Waterfall
- 水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。例如:1^3+5^3+3^3=153
- 使用vue开发APICloud软件APP的教程
- 帝国搜索模板不支持php,解决帝国CMS搜索模板不支持灵动标签的方法