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

Wil*_*ord 5 c++ enums

如果我这样定义一个枚举:

enum Foo : bool { Left = false, Right = true };
Run Code Online (Sandbox Code Playgroud)

然后尝试从布尔值构造一个,如下所示:

int main (int ac, const char **av) {
    Foo foo ( ac > 1 );
    cout << boolalpha << bool(foo) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它失败了,但是使用了一个额外的构造函数,如下所示:

Foo foo ( Foo( ac > 1 ) );
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我以为Foo foo (...) 一个显式的构造函数调用?

小智 3

Foo foo ( ac > 1 ); 这是 C++最令人烦恼的解析的一个例子。这是一个不执行任何操作的函数声明。

  • 如何将比较“(ac &gt; 1)”解释为函数声明的一部分(可能是*参数*)? (3认同)
  • 是的,它没有说明如何将 `(ac &gt; 1)` 解析为函数参数类型。这就是我问的原因。 (2认同)