在C+中声明本地对象+; < > C++中的一个问题讨论了在函数中声明局部对象的正确方法:

在C+中声明本地对象+; < > C++中的一个问题讨论了在函数中声明局部对象的正确方法:,c++,C++,给出常见问题解答中的示例: class Bar { public: Bar(); }; class Foo { public: Foo(Bar const& b); void blah(); }; void yourCode() { Foo x(Bar()); // error } 在VS2012中,错误是foox(Bar(uu cdecl*)(void)):未调用原型函数(是否打算使用变量定义? 有人能解释一下为什么这个声明会出错吗?(C++常见问

给出常见问题解答中的示例:

class Bar { 
public: 
  Bar();
};

class Foo {
public:
  Foo(Bar const& b);
  void blah();
};

void yourCode()
{
  Foo x(Bar());  // error     
}
在VS2012中,错误是
foox(Bar(uu cdecl*)(void)):未调用原型函数(是否打算使用变量定义?

有人能解释一下为什么这个声明会出错吗?(C++常见问题解答的解释太模糊了)。
Foo
Bar
都在
yourCode()
Foo x(Bar())的主体中可见
是我声明类型为
Foo

的对象的一种方法。看起来您遇到了
const
一致性问题。
Foo
的构造函数需要一个
const
Bar
,而
Bar()
不是。尝试:

const Bar b = Bar();
Foo x = Foo(b);

由于此C++是最麻烦的解析,您可以执行以下操作:

Foo x((Bar()));

详细信息将在您在问题中提供的parashift链接中查看。

但是请注意,如果将
Foo
复制构造函数设置为
explicit
,则第二个示例将中断

谷歌“最烦人的解析”,你会得到答案。一些帮助:不提供这个答案,因为我相信这是一个骗局,因为它提到了所谓的“最烦人的解析”。。。修复方法是添加一组额外的括号
foox((Bar())或将
实例提取为变量
条;Foo x(bar)@C.R.你能回答这个问题吗?我很乐意接受。@newprint:其他人有更详细的答案。您可以接受这些。@zneak,然后它接受一个未命名的
条作为参数。最简单的修复方法是
foox{Bar{} IMO,但它是C++ 11OH CRAP,你说得对。@ ZNEAK,狡猾的C++是棘手的:P无论如何,我将离开它,因为它没有被提及。
Foo x = Bar();