这怎么是一个最令人烦恼的解析?

Jam*_*nco 5 c++ most-vexing-parse

我正在阅读这篇文章

第3项中有一条声明说

// C++98 
rectangle       w( origin(), extents() );       // oops, vexing parse
Run Code Online (Sandbox Code Playgroud)

以上是一个最令人烦恼的解析.如果我做了这样的事情

struct origin
{
};
struct Rectangle
{
    Rectangle(const origin& s)
    {
    }
};
Run Code Online (Sandbox Code Playgroud)

该声明

 Rectangle s(origin());    
Run Code Online (Sandbox Code Playgroud)

工作得很好,并不像一个令人讨厌的解析.为什么作者说这是一个令人烦恼的解析.这是一个错字还是我错过了什么?

M.M*_*M.M 9

Rectangle s(origin());是一个令人烦恼的解析.它声明了一个s返回的函数,并将函数返回rectangle作为参数指针origin.不确定你的意思是"工作正常".

rectangle w( origin(), extents() );声明一个函数w返回rectangle并获取参数:指向函数返回的origin指针,以及指向函数返回的指针extents.

有关更多详细信息,请参阅此问题或浏览标记下的其他问题.

  • @JamesFranco如果它不是一个有效的声明,那么它就不会是一个令人烦恼的解析."烦恼"部分是因为你试图写一个变量声明,但它恰好在语法上有效作为一个函数声明.显然,函数声明是合法的. (3认同)