如何解决“用户自定义‘操作符||()’总是计算所有两个参数”警告时-Weffc ++是否已经开启?

问题描述 投票:0回答:1

这是一个重载||在我的类中定义的操作:

bool operator|| (const MyClass& v) const {
    return ......;  //some calculation
}

编译器会报告警告:

警告:用户定义“布尔MyClass的::运算||(常量MyClass的&)常量”总是计算两个参数[-Weffc ++]

我理解,因为内置了警告||是这可能是从什么用户自定义的操作者想要表现不同的短路。但事实是,我需要有-Weffc++打开任何警告是不允许的。那么什么码||重载可以解决此警告(即禁止这种警告)?谢谢。

我使用的是G ++ 5.4.0在Ubuntu 16.04。

c++ operator-overloading suppress-warnings
1个回答
2
投票

您可以通过不超载的逻辑运算符(其内置的版本短路),避免了警告。如果你应该遵循-Weffc++选项的指导方针,那么你应该不会宣布这样的过载。

您可以使用:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
// the declaration
#pragma GCC diagnostic pop

为了不管编译选项暂时抑制了警告。

© www.soinside.com 2019 - 2024. All rights reserved.