我正在浏览article
并且第3项中有一条声明说
// C++98
rectangle w( origin(), extents() ); // oops, vexing parse
以上是一个最令人烦恼的解析。如果我做了这样的事情
struct origin
{
};
struct Rectangle
{
Rectangle(const origin& s)
{
}
};
声明
Rectangle s(origin());
工作正常,并不像一个令人烦恼的解析。 为什么作者说这是一个令人烦恼的解析。这是一个错字还是我错过了什么?
答案 0 :(得分:9)
Rectangle s(origin());
也是一个令人烦恼的解析。它声明了一个返回s
的函数rectangle
,并将函数作为参数指针返回origin
。不确定你的意思是“工作正常”。
rectangle w( origin(), extents() );
声明函数w
返回rectangle
并获取参数:指向返回origin
的函数的指针,以及指向返回extents
的函数的指针。
有关详细信息see this question或浏览most-vexing-parse标记下的其他问题。