【发布时间】:2013-08-23 01:18:06
【问题描述】:
C++ FAQ 中的一个问题讨论了在函数中声明本地对象的正确方法:http://www.parashift.com/c++-faq/fn-decl-vs-obj-instantiation.html
以常见问题解答为例:
class Bar {
public:
Bar();
};
class Foo {
public:
Foo(Bar const& b);
void blah();
};
void yourCode()
{
Foo x(Bar()); // error
}
在 VS2012 中,错误为 Foo x(Bar (__cdecl *)(void))': prototyped function not called (was a variable definition intended?)
有人能解释一下为什么这个声明会出错吗?(C++ FAQ 解释太模糊了)。
Foo 和 Bar 在 yourCode() 的正文中都是可见的,Foo x(Bar()); 是我声明 Foo 类型对象的一种方式。
【问题讨论】:
-
谷歌“最令人头疼的解析”,你会得到答案。
-
一些帮助:most vexing parse
-
不提供这个作为答案,因为我确信它是一个骗子,正如提到的它被称为“最令人烦恼的解析”......修复是添加一组额外的括号
Foo x((Bar()));或提取Bar实例作为变量Bar bar; Foo x(bar);. -
@C.R.你能给出这个答案吗?我很乐意接受。
-
@newprint:其他人有更详细的答案。你可以接受这些。
标签: c++