我有以下编码运算符重载:
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_;
^
警告是什么意思?我该如何解决?
答案 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_;