【发布时间】:2016-02-15 13:52:52
【问题描述】:
考虑代码:
#include <iostream>
struct Foo
{
Foo(int){}
operator bool() const
{
return true;
}
};
int main()
{
if(Foo foo{42})
{
std::cout << "ok\n";
}
}
它在 gcc5 下编译得很好。但是,如果我用
替换行if(Foo foo{42})
if(Foo foo(42))
我得到一个编译时错误:
错误:“foo”之前的预期主表达式
这里发生了什么?没有麻烦的解析 imo,为什么使用大括号有效?
【问题讨论】:
-
@Niall 是的,这就是我问这个问题的原因,在那个答案出现之前。我现在应该把它作为一个骗子关闭它并链接到那个问题。
-
我认为一个更广泛的问题是为什么一开始就不包括在内。这可能是一些兼容性问题,也不确定它如何与令人烦恼的解析相关联;但令我有些意外的是不被允许。去显示我在条件语句中初始化变量的次数是多么少......
标签: c++ c++11 most-vexing-parse