在C ++中声明本地对象

时间:2013-08-23 01:18:06

标签: c++

关于C ++ FAQ的一个问题讨论了在函数中声明局部对象的正确方法:http://www.parashift.com/c++-faq/fn-decl-vs-obj-instantiation.html

以FAQ为例:

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解释太模糊了)。 FooBar都在yourCode()的正文中可见,而Foo x(Bar());是我声明类型为Foo的对象的方式。

2 个答案:

答案 0 :(得分:6)

由于这个C ++是最令人烦恼的解析,你可以这样做:

Foo x((Bar()));

Foo x = Bar();

详细信息将在您在问题中提供的非常快速的链接中进行审核 但请注意,如果Foo复制构造函数为explicit,则第二个示例将中断。

答案 1 :(得分:0)

看起来您遇到了const一致性问题。 Foo的构造函数需要const BarBar()不是const Bar b = Bar(); Foo x = Foo(b); 。尝试:

{{1}}