理解const操作符
Understanding const operator
我在读Scott Meyers的书时遇到了下面的例子:
class Rational { ... };
const Rational operator*(const Rational& lhs, const Rational& rhs);
Rational a, b, c;
...
(a * b) = c; // invoke operator= on the
// result of a*b!
他说这是一件很奇怪的事情,但我不明白为什么。在a*b
的结果上调用operator=
有什么问题?
a*b
的结果是一个临时值,它将在语句结束时消失。给它赋值会很奇怪,因为赋值后你不能对它做任何事情。
然而,事实是它很奇怪并不一定证明添加更多的奇怪来防止它。在现代c++中,像这样返回const
对象是一个坏主意,因为它抑制了move语义。
错误或奇怪的是,操作符=是在一个对象上调用的,该对象将在语句结束时被销毁(即在;
处)。
相关文章:
- 用于具有const数据成员的类的move和右值赋值操作符
- 为什么在操作符重载中需要使用const ?
- const转换操作符
- 操作符[](const char *)歧义
- 调用转换操作符不能用于静态const变量
- c++中重载+操作符和const的使用
- 操作符重载=和const引用
- 关于操作符重载定义中的const
- c++ const重载赋值操作符机制
- 友元操作符行为(const与非const)
- 重载const操作符[]时使用const_iterator
- 如何声明操作符/重载函数来操作const变量和非const变量
- const关键字在操作符定义中做什么?
- 操作符+()选择右值引用变量而不是const左值变量
- 在构造函数(re. noexcept)期间调用哪个操作符来赋值给const引用
- 在操作符重载参数列表中包含const会产生错误(c++)
- 不能使用操作符重载比较const和非const模板类型
- 操作符情况下的c++ const转换
- 理解const操作符
- 为什么三元操作符const我的字符串