如果我像这样定义一个enum:
enum Foo : bool { Left = false, Right = true };
则尝试从布尔值构造一个,如下所示:
int main (int ac, const char **av) {
Foo foo ( ac > 1 );
cout << boolalpha << bool(foo) << endl;
return 0;
}
失败,但可以使用额外的构造函数,如:
Foo foo ( Foo( ac > 1 ) );
为什么会这样?我认为Foo foo (...)
是显式构造函数调用?
Foo (ac> 1);这是c++中最令人烦恼的解析。它是一个函数声明,不做任何事情。
我认为你做不到:
Foo foo ( ac > 1 );
假设您定义Foo enum为:
enum Foo : bool { Left = false };
如果你调用:
Foo foo(true);
没有合适的枚举值来初始化