用底层" bool"构建枚举。从布尔值输入?

时间:2016-06-29 09:55:53

标签: c++ enums

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

   <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-MY-CODE" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
    <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
            j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
            '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
    })(window,document,'script','dataLayer','GTM-MY-CODE');</script>

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

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 ) ); 是一个显式的构造函数调用?

2 个答案:

答案 0 :(得分:4)

我认为你不能这样做:

Foo foo ( ac > 1 );

假设您将Foo枚举定义为:

enum Foo : bool { Left = false };

如果你打电话会怎么样:

Foo foo(true);

您没有适合初始化内容的枚举值。

答案 1 :(得分:0)

Foo foo(ac> 1); 这就是C ++ most vexing parse的情况。这是什么都不做的函数声明。