禁用if语句中的枚举赋值g++
disable enum assignment g++ in if statement
我想将if语句中的赋值视为错误:
#include <cstdio>
enum some {
a,
b
};
void foo(some e) {
if (e = a) {
puts("yes");
} else {
puts("no");
}
}
int main() {
foo(a);
return 0;
}
这似乎是一件理智的事情,除了我也想有这样的东西:
boost::optional<int> optionalValue;
if (const auto& value = optionalValue) {
}
-Wall
给了我enum.cpp:9: warning: suggest parentheses around assignment used as truth value
,但我想要比-Wall
更具体的东西
您可以将e
声明为const
。那么赋值就是一个错误。
或者,您可以告诉g++使用-Werror
将警告视为错误。然后,再加上适当的警告设置,if
表达式中的任何赋值都将是错误的。使用-Wparentheses
只能启用此类警告。但是,请注意,有时这不是错误,而是故意的。这就是g++建议使用括号来消除意外赋值的歧义的原因。
如果您使用g++的最新版本,那么它会告诉您哪个警告标志对应于哪个诊断。使用g++4.9.2,您的代码给出:
m.cc:9:14: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
这告诉您错误来自标志-Wparentheses
,它是-Wall
的子集。
您可以使用-Werror
指示g++将所有警告视为错误。但是,如果您只想将此特定警告视为错误,则可以使用:
-Werror=parentheses
这个版本的g++不会对您建议的代码const auto& value = optionalValue
发出警告,所以也许是时候升级您的编译器版本了。
相关文章:
- 为什么 int 类型的枚举类值不能用作 int
- 如何使用默认值为构造函数中的枚举赋值?
- 使用 Doxygen 记录枚举类值,而不启用EXTRACT_ALL
- 在结构中使用枚举的值
- 在运行时使用枚举器值作为模板函数的模板参数的元程序
- 如何从枚举类值中指定模板函数参数中的数组大小?
- 为什么isocpp允许我们超过枚举类值
- 比较枚举的值会给出编译器错误
- C++枚举索引值
- 比较枚举类值时的奇怪行为
- 使用对其他枚举值的操作定义枚举元素值
- 从枚举类值模板参数推断枚举类类型
- 如何将枚举返回值转换为C 异常
- C MFC中非命中枚举的值
- 为什么可以获取此枚举成员值,而不必先深入研究嵌套枚举
- 在C++中显示、更新和验证枚举的值
- switch()中未处理的枚举类值-异常或断言
- 禁用if语句中的枚举赋值g++
- 正在为枚举赋值
- 通过numeric_limits为枚举赋最大值