C++ 这是一个多么令人烦恼的解析?
我正在经历这一切 第3项中有一项声明说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()); 工作正
// 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如果它不是一个有效的声明,那么它就不会是一个令人烦恼的解析。“令人烦恼”的部分是因为您试图编写一个变量声明,但它恰好在语法上作为函数声明是有效的。显然,函数声明是合法的。