【发布时间】:2015-07-22 21:47:11
【问题描述】:
我正在经历这个article
并且在第 3 项中有一个声明说
// C++98
rectangle w( origin(), extents() ); // oops, vexing parse
上面的解析是如何最令人头疼的。如果我做了这样的事情
struct origin
{
};
struct Rectangle
{
Rectangle(const origin& s)
{
}
};
声明
Rectangle s(origin());
工作正常,不像令人烦恼的解析。 为什么作者说这是一个令人烦恼的解析。这是错字还是我遗漏了什么?
【问题讨论】:
-
参见文档的第 1(b) 节,它解释了这些令人烦恼的解析。
-
你为什么说
Rectangle s(origin());不像一个令人烦恼的解析?这是最令人头疼的解析的典型例子。如果不是,您认为最令人头疼的解析是什么? -
声明工作正常。尝试使用
s看看会发生什么。 -
我知道它类似于一个令人烦恼的解析。但是我的印象是,令人烦恼的解析会导致编译时错误。例如,对于一个类 foo 使用它,如
foo a();会在编译时出错,它是一种最令人烦恼的解析形式。所以从我得到的是一个语句可能类似于一个令人烦恼的解析,同时编译时没有任何问题。据我了解,一个令人烦恼的解析是一个可能类似于函数的语句。<Return type> functionName (parameters..) -
之所以称它为vexing,是因为声明不会导致编译时错误。它只会在以后的程序中导致错误如果您使用该函数。
标签: c++ most-vexing-parse