重载运算符 - 警告:语句无效[-Wunused-value]

时间:2016-02-24 11:19:20

标签: c++

我有以下编码运算符重载:

Clase &operator*(Clase const & n){
     coeficiente_*n.coeficiente_;
     grado_*n.grado_;
     return *this;
}

编译时,我收到以下警告:

clase.hpp:62:18: warning: statement has no effect [-Wunused-value]
      coeficiente_*n.coeficiente_;
                  ^

警告是什么意思?我该如何解决?

2 个答案:

答案 0 :(得分:1)

编译器警告您coeficiente_*n.coeficiente_grado_*n.grado_无效。为了让它们产生效果,应将结果分配给。为了示例,我假设int类型;

 int c = coeficiente_*n.coeficiente_;
 int g = grado_*n.grado_;

在给定OP和

的情况下,运算符的形式看起来也不正确
Clase a, b;
// initialise as required
c = a * b;

乘法将修改a,结果c将与a相同;因为提供的运算符看起来是一个成员方法,结果通过引用返回(this)。这可能不是operator*的目的。

two alternatives to this,提供operator*作为非成员函数(可能具有friend访问权限),或从成员方法返回新对象。

Clase operator*(Clase const & n) /*const*/
{
     Clase result; // assumption is their is a default constructor for this example
     result.coeficiente_ = coeficiente_ * n.coeficiente_;
     result.grado_ = grado_ * n.grado_;
     return result;
}

也可以根据需要/期望将成员方法标记为const

非成员实施可能看起来像(我保留了大部分实施用于比较):

Clase operator*(Clase const & l, Clase const & r)
{
     Clase result;
     result.coeficiente_ = l.coeficiente_ * r.coeficiente_;
     result.grado_ = l.grado_ * r.grado_;
     return result;
}

答案 1 :(得分:0)

您的陈述

coeficiente_*n.coeficiente_;
grado_*n.grado_;

没有效果。它们与写作相同

5;
24;
"123";

你想要做一个像

这样的受欢迎的人
coeficiente_ *= n.coeficiente_ 
grado_ *= n.grado_;