【发布时间】:2014-12-11 13:00:06
【问题描述】:
为什么编译器将此行解释为函数定义而不是变量定义:
Y y(X());
在以下代码中:
#include <iostream>
struct X {
X() { std::cout << "X"; }
};
struct Y {
Y(const X &x) { std::cout << "Y"; }
void f() { std::cout << "f"; }
};
int main() {
Y y(X());
y.f();
}
VS2010 在“y.f();”行出现以下错误
left of '.f' must have class/struct/union
标准的哪一部分描述了这种行为? 以下问题的答案没有提供有关它的详细信息: Most vexing parse
【问题讨论】:
-
顺便说一句,这不是编译器错误。这是最令人头疼的解析问题,巧妙地伪装。
-
根据编辑投票重新打开 - 来自标准的引用实际上是有用的。 6.8 讨论了表达式语句与声明的歧义,但最令人头疼的解析实际上是两个声明之间的歧义。
标签: c++ language-lawyer most-vexing-parse