用整数和-Weffc ++标志覆盖+/ - /*/%

Pin*_*ade 3 c++ warnings

我有一个名为Coord的类......它有实例数据x,y.我想覆盖*运算符,以便*运算符可用于将Coord乘以整数或双精度!这是我提出的解决方案:

Coord& Coord::operator*(int n)
{
    this->x = this->x*n;
    this->y = this->y*n;
    return *this;
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理 - 我已经测试了一些来自main的打印输出......唯一的问题是......我从-Weffc ++标志得到警告!它说我的函数应该按值返回!我知道这个标志对应于"有效的C++"一书,但我手头没有副本 - 这本书的内容是什么?什么是通过价值?

pad*_*ddy 6

只是详细说明Grizzly的评论......这不是就地增殖.因此,您应该将其声明为const以明确地防止:

Coord Coord::operator*(int n) const {
    Coord c(*this);
    c.x *= n;
    c.y *= n;
    return c;
}
Run Code Online (Sandbox Code Playgroud)

或者如果你有一个有用的构造函数:

Coord Coord::operator*(int n) const {
    return Coord(x*n, y*n);
}
Run Code Online (Sandbox Code Playgroud)

就地乘法是不同的(和非常数):

Coord& Coord::operator*=(int n) {
    x *= n;
    y *= n;
    return *this;
}
Run Code Online (Sandbox Code Playgroud)