我经常看到我的老师使用 const operator +-*/
返回 const
值。这样做是一个好习惯吗?我应该为我写的每一门课都这样做吗? ( T
表示任何重载运算符 +-*/的结构/类)。
例如:
struct Fraction
{
//something here.
const Fraction operator+(const Fraction &rhs) const;
const Fraction operator-(const Fraction &rhs) const;
const Fraction operator*(const Fraction &rhs) const;
const Fraction operator/(const Fraction &rhs) const;
};
最佳答案
不,这是一个坏主意,因为它禁止移动语义。在下面的:
a = b + c;
如果不是
b + c
,则 a
的临时结果可以移动到 const
,但如果是 const
则必须复制。复制通常是比移动更昂贵的操作。从历史上看,在移动语义之前的日子里,有人建议防止像
(a + b) = c
这样的废话。有些人争辩说,最好让它导致编译时错误,而不是奇怪的运行时行为。如今,即使您同意该论点,这样做也是有代价的。关于c++ - 从 "const T"返回 "T::operator+(const T& rhs) const"是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26402041/