CppCoreGuidelines C.167 按照约定习俗使用操作符
22 January 2023
“Use an operator for an operation with its conventional meaning”
理由
可读性,约定习俗,可重用。支持泛型代码。
例子
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 */; }
cout_my_class
本身是没问题的,但是如果我们要跟其他依赖于 <<
操作的代码在一起使用,就有问题了。
My_class var { /* ... */ }; // ... cout << "var = " << var << '\n';
注意
大部分操作符有很强很严格的使用习俗约定,比如:
- 比较 (
=, !
, <, <=, >, >=, <=>), - 运算符 (+, -, *, /, %)
- 访问操作 (., ->, unary *, [])
- 赋值 (=)
不要自己定义一种行为,也不要为这些操作发明新的名字。
强化
- 需要语义理解