专栏首页C++核心准则原文翻译C++核心准则C.167:为具有约定俗成​语义的操作使用运算符

C++核心准则C.167:为具有约定俗成​语义的操作使用运算符

C.167: Use an operator for an operation with its conventional meaning

C.167:为具有约定俗成语义的操作使用运算符

Reason(原因)

Readability. Convention. Reusability. Support for generic code。

可读性。遵守惯例。可复用性。支持泛化代码。

Example(示例)

void cout_my_class(const My_class& c) // confusing, not conventional,not generic
{
    std::cout << /* class members here */;
}

std::ostream& operator<<(std::ostream& os, const my_class& c) // OK
{
    return os << /* class members here */;
}

By itself, cout_my_class would be OK, but it is not usable/composable with code that rely on the << convention for output:

如果只考虑自己的话,cout_my_class还不错,但是它无法在通过<<运算符输出的代码中使用(或者和这样的代码一起使用)。

My_class var { /* ... */ };
// ...
cout << "var = " << var << '\n';
Note(注意)

There are strong and vigorous conventions for the meaning most operators, such as

很多操作符具有强烈而且活跃的约定含义,例如:

  • comparisons (==, !=, <, <=, >, and >=),
  • 比较运算符
  • arithmetic operations (+, -, *, /, and %)
  • 数学运算符
  • access operations (., ->, unary *, and [])
  • 访问运算符
  • assignment (=)
  • 赋值运算符

Don't define those unconventionally and don't invent your own names for them.

不要违反惯例定义这些运算符,也不要为它们发明新名称。

Enforcement(实施建议)

Tricky. Requires semantic insight.

不容易。需要语义方面的深入理解。

原文链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c167-use-an-operator-for-an-operation-with-its-conventional-meaning


觉得本文有帮助?请分享给更多人。

关注【面向对象思考】轻松学习每一天!

面向对象开发,面向对象思考!

本文分享自微信公众号 - 面向对象思考(OOThinkingDalian),作者:面向对象思考

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则C.35:基类的析构函数要么是公开的虚函数,要么是保护的非虚函数

    C.35: A base class destructor should be either public and virtual, or protected ...

    面向对象思考
  • C++核心准则C.138:使用using为派生类生成重载函数集合‍

    C.138: Create an overload set for a derived class and its bases with using

    面向对象思考
  • C++核心准则C.33:如果类包含拥有所有权的指针成员,定义析构函数

    C.33: If a class has an owning pointer member, define a destructor

    面向对象思考
  • 从字节码层面,解析 Java 布尔型的实现原理

    最近在系统回顾学习 Java 虚拟机方面的知识,其中想到一个很有意思的问题:布尔型在虚拟机中到底是什么类型?

    陈树义
  • 快速学习Linux-系统的目录结构

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • python socket 编程之三:长

    长连接:开启一个socket连接,收发完数据后,不立刻关闭连接,可以多次收发数据包。

    py3study
  • HttpServletRequest.getParameter()出现乱码现象解决方案

    一、首先在项目中添加一个过滤器类,用来将所有参数转化为指定格式(UTF-8) import java.io.IOException;   import java...

    Venyo
  • bat锁机代码

    Youngxj
  • Web前端学习 第7章 Vue基础教程3 模板语法

    指令 (Directives) 是带有 v- 前缀的特殊属性,在此之前我们学习过的指令如下所示:

    学习猿地
  • 电商前端交易型系统设计原则

    个人认为设计系统要因场景因时间而异,一个系统不是一下子就设计的非常完美,在有限的资源情况下一定是先解决当下最核心的问题,并预测/发现未来可能出现的问题,一步步解...

    牛嗷嗷

扫码关注云+社区

领取腾讯云代金券