我必须首先承认我对 C++ 的经验很少,所以如果这个问题看起来有些愚蠢,请原谅我。
在使用 PVS-Studio 分析项目时,我发现了一个令人费解的元素。这是重现问题的代码:
class Test
{
public:
const Test &Test::operator=(const Test &test);
};
const Test &Test::operator=(const Test &test) {
if (this == &test)
return test;
return *this;
}
当然,这里不需要这个赋值运算符,但问题就在 PVS-Studio 生成的警告中:
V790 赋值运算符通过非常量引用获取对象并返回该对象,这很奇怪。
(强调我的)
我不知道该怎么想。这个非常量引用在哪里?赋值运算符的参数是const Test &
,即它似乎是常量引用。此外,return test
仅当分配无论如何都是无操作时才执行,即返回*this
并且test
应该没有区别。
这是误报,还是我根本不明白什么?