专栏首页C++核心准则原文翻译C++核心准则C.160:定义运算符主要是为了模仿习惯用法

C++核心准则C.160:定义运算符主要是为了模仿习惯用法

C.160: Define operators primarily to mimic conventional usage

C.160:定义运算符主要是为了模仿习惯用法

Reason(原因)

Minimize surprises.

让程序看起来更自然。

Example(示例)

class X {
public:
    // ...
    X& operator=(const X&); // member function defining assignment
    friend bool operator==(const X&, const X&); // == needs access to representation
                                                // after a = b we have a == b
    // ...
};

Here, the conventional semantics is maintained: Copies compare equal.

这里,赋值,相等比较的习惯语义得以保持。

Example, bad(反面示例)

X operator+(X a, X b) { return a.v - b.v; }   // bad: makes + subtract
Note(注意)

Nonmember operators should be either friends or defined in the same namespace as their operands. Binary operators should treat their operands equivalently.

非成员运算符应该要么是友元函数,要么和操作对象定义在一起。二进制运算符应该同等对待操作对象。

Enforcement(实施建议)

Possibly impossible.

可能无法做到。

原文链接:

https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c160-define-operators-primarily-to-mimic-conventional-usage


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

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

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

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

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

原始发表时间:2020-02-26

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++核心准则C.80:如果明确希望使用默认语义,使用=default

    C.80: Use =default if you have to be explicit about using the default semantics

    面向对象思考
  • C++核心准则C.86:保证==语义遵守操作数规则并不会抛出异常

    C.86: Make == symmetric with respect to operand types and noexcept

    面向对象思考
  • C++核心准则​T.123:使用常量表达式函数在编译时求值

    T.123: Use constexpr functions to compute values at compile time

    面向对象思考
  • 以太坊是什么鬼?!媲美比特币的加密币大揭秘

    大数据文摘
  • java系统高并发解决方案之图片服务器分离

    http://blog.csdn.net/jimmy609/article/details/37909013

    bear_fish
  • 被严重低估的Web开发框架:WordPress

    我在About me页面里说过,大学时候玩过WordPress,那时候还是2.X版本的吧,更多的是当作一个日记本在用,工作之后接触了各种语言和新技术,Pytho...

    丘壑
  • 编程小知识 之 杂记两则

    代码定义了一个参数为字符串指针的函数 func,调用时却使用了 “string” “params” 这种字符串连写的方式(中间没有逗号分隔符),初看时我一直怀疑...

    用户2615200
  • 用Ansible部署ELK STACK

    ? 作者:Daniel Berman 译者:张斌 想要重复部署你的ELK STACK更方便一点?在这篇帖子中,我们来看看如何通过使用Ansible来实现这一...

    yuanyi928
  • 互联网账户系统如何设计(上篇)?

    在很多互联网公司业务发展的早期,业务模式比较单一的情况下,涉及用户账户资金交易相关的逻辑也比较简单,但是随着公司业务模式的不断创新及类型的多元化发展,会渐渐发现...

    用户5927304

扫码关注云+社区

领取腾讯云代金券