Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 这是一个多么令人烦恼的解析?_C++_Most Vexing Parse - Fatal编程技术网

C++ 这是一个多么令人烦恼的解析?

C++ 这是一个多么令人烦恼的解析?,c++,most-vexing-parse,C++,Most Vexing Parse,我正在经历这一切 第3项中有一项声明说 // C++98 rectangle w( origin(), extents() ); // oops, vexing parse 上面的解析是如何最令人烦恼的。如果我做了这样的事 struct origin { }; struct Rectangle { Rectangle(const origin& s) { } }; 声明 Rectangle s(origin()); 工作正

我正在经历这一切

第3项中有一项声明说

// C++98 
rectangle       w( origin(), extents() );       // oops, vexing parse
上面的解析是如何最令人烦恼的。如果我做了这样的事

struct origin
{
};
struct Rectangle
{
    Rectangle(const origin& s)
    {
    }
};
声明

 Rectangle s(origin());    
工作正常,不像令人烦恼的解析。 为什么作者说这是一个令人烦恼的解析。那是打字错误还是我遗漏了什么?

矩形s(origin())也是一个令人烦恼的解析。它声明了一个函数
s
,该函数返回
rectangle
,并将返回
原点的函数作为参数指针。不知道你说的“工作正常”是什么意思

矩形w(原点(),范围())
声明一个函数
w
返回
矩形并获取参数:指向函数返回
原点的指针,以及指向函数返回
范围的指针


有关更多详细信息或浏览标签下的其他问题。

请参阅本文档的第1(b)节,它解释了这些令人烦恼的解析。为什么说
矩形s(origin())与烦人的解析不相似?这是最令人烦恼的解析的典型例子。如果不是这样的话,你认为最麻烦的解析是什么?声明工作得很好。试着使用
s
,看看会发生什么。我知道这类似于令人烦恼的解析。然而,我的印象是,令人烦恼的解析将导致编译时错误。例如,一个类foo使用它,比如
fooa()
在编译时会给出一个错误,这是一种最麻烦的解析形式。因此,我得到的结果是,一个语句可以类似于麻烦的解析,同时编译时不会出现任何问题。据我所知,一个令人烦恼的解析是一个可能类似于函数的语句
functionName(parameters..)
之所以称之为vexing,是因为该声明不会导致编译时错误。如果你使用这个函数,它只会在以后的程序中导致一个错误。我的印象是,令人烦恼的解析会导致编译时错误。例如,对于类
foo
fooa()一样使用它在编译时会出现错误,这是一种最麻烦的解析形式。@James Franco,除非你试着像使用object@JamesFranco如果它不是一个有效的声明,那么它就不会是一个令人烦恼的解析。“令人烦恼”的部分是因为您试图编写一个变量声明,但它恰好在语法上作为函数声明是有效的。显然,函数声明是合法的。