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"行的另一个"语句无效"来警告我?
在 C++17 中,您可以将运算符重载标记为[[nodiscard]]:
[[nodiscard]] bool operator==(int _value) const { return value == _value; }
Run Code Online (Sandbox Code Playgroud)
如果未使用返回值,这将鼓励编译器发出警告。
来自 cppreference:
[[nodiscard]]出现在函数声明、枚举声明或类声明中。如果从废弃值表达式(而不是强制转换为 void)调用声明为 nodiscard 的函数或按值返回声明为 nodiscard 的枚举或类的函数,则鼓励编译器发出警告。