【发布时间】:2020-03-28 11:07:27
【问题描述】:
我当然遗漏了一些东西,但我不明白为什么会编译(同时使用 g++ 和 clang++):
struct A
{
};
struct B
{
};
int main()
{
A a(B);
}
首先,B 是一个类型...不是一个值。我应该如何解释这段代码?
【问题讨论】:
-
@alterigel 真的吗?在这种情况下,没有歧义。它只能是一个函数声明。不是
A a(B());,它可以是变量定义或函数声明。 -
你会惊讶地发现
struct A{}; int main() { A(foo); }compiles as is,即使foo没有说出任何名字。 -
@alterigel -- 这不是最令人头疼的解析。查看您链接到的页面上的示例。这只是一个函数声明。
-
@PeteBecker,最好解释一下为什么这不是 MVP,而不是仅仅断言它不是,我相信 walnut 已经在上面做了。
标签: c++ syntax declaration most-vexing-parse