如何在重载==时强制"语句无效"警告

Dav*_*nce 7 c++ operator-overloading

在以下示例中:

class Test

{
public:
    Test(int _value) { value = _value; };
    const bool operator==(int _value) const { return value == _value; };
private:
    int value;
};

int main(void)
{
    int a;
    a == 1;

    Test b(1);
    b == 1;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

汇编给出以下内容:

$ g++ -Wall -pedantic -o test test.cc
a.cc: In function ‘int main()’:
a.cc:13:7: warning: statement has no effect [-Wunused-value]
     a == 1;
     ^
Run Code Online (Sandbox Code Playgroud)

这很好,因为它已经警告我发生错误并输错了== for =

但我的Test课程也是如此.我如何标记类或者运算符的定义==让编译器用"b == 1"行的另一个"语句无效"来警告我?

Vit*_*meo 4

在 C++17 中,您可以将运算符重载标记为[[nodiscard]]

[[nodiscard]] bool operator==(int _value) const { return value == _value; }
Run Code Online (Sandbox Code Playgroud)

如果未使用返回值,这将鼓励编译器发出警告。

wandbox.org 上的实例


来自 cppreference:

[[nodiscard]]

出现在函数声明、枚举声明或类声明中。如果从废弃值表达式(而不是强制转换为 void)调用声明为 nodiscard 的函数或按值返回声明为 nodiscard 的枚举或类的函数,则鼓励编译器发出警告。

  • @Rakete1111 的评论得到了这个答案中的链接的支持:“[...]鼓励编译器发出警告。” 鼓励!=必需。 (2认同)