我经常看到我的老师使用 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/

10-11 20:10
查看更多