我想将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
更具体的内容
答案 0 :(得分:1)
您可以将e
声明为const
。然后分配将是一个错误。
或者,您可以告诉g ++将警告视为-Werror
的错误。然后,结合适当的警告设置,if
表达式中的任何赋值都将是错误。您只能使用-Wparentheses
启用此类警告但请注意,有时这不是错误,而是故意进行的。这就是为什么g ++建议使用括号来消除意外分配的歧义。
答案 1 :(得分:1)
如果您使用更新版本的g ++,它会告诉您哪个警告标志对应哪个诊断。使用g ++ 4.9.2,您的代码会给出:
m.cc:9:14: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
这告诉您错误来自标记-Wparentheses
,该标记是-Wall
的子集。
您可以指示g ++使用-Werror
将所有警告视为错误。但是,如果您只想将此特定警告视为错误,则可以使用:
-Werror=parentheses
此版本的g ++不会针对您建议的代码const auto& value = optionalValue
发出警告,因此可能是时候升级您的编译器版本了。