如果我这样定义一个枚举:
<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 ) );
是一个显式的构造函数调用?
答案 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的情况。这是什么都不做的函数声明。