0

我必须首先承认我对 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应该没有区别。

这是误报,还是我根本不明白什么?

4

0 回答 0