从布尔值构造具有底层"bool"类型的枚举?

constructing enum with underlying "bool" type from a boolean?

本文关键字:bool 类型 枚举 布尔值      更新时间:2023-10-16

如果我像这样定义一个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);

没有合适的枚举值来初始化