【发布时间】:2015-04-12 01:13:55
【问题描述】:
我的这段代码无法用 gcc 4.9.2 编译:
#include <stdio.h>
enum fooEnum
{
foo1 = 1 << 0,
foo2 = 1 << 1,
foo3 = 1 << 2,
};
int main()
{
fooEnum foo {};
int bar;
bar = foo1;
foo |= (fooEnum) bar; // fails
printf("foo=%d\n", foo);
}
编译命令:gcc -std=c++11 -Wall -Wextra -Werror enum.cpp -c
错误信息是:
enum.cpp: In function ‘int main()’:
enum.cpp:16:6: error: invalid conversion from ‘int’ to ‘fooEnum’ [-fpermissive]
foo |= (fooEnum) bar;
^
换行
foo = (fooEnum) bar;
工作正常。为什么我不能使用位 OR?如您所见,fooEnum 是bit enum。
更新:
把代码改成
fooEnum foo = foo2;
int bar;
bar = foo1 | foo;
foo = (fooEnum) bar;
有效,输出应为3。
【问题讨论】: