首页 > 解决方案 > 构造对象的歧义

问题描述

这是我写的一个例子:

struct Foo
{
  Foo() = default;
  Foo(int)
  {

  };
};

int main()
{
  int baz = 10;
  Foo(1); // OK
  Foo(baz); // Fails, redefinition 
  return 0;
}

为什么Foo(baz)尝试构造一个新对象baz,而不是构造一个将参数传递baz给构造函数的匿名对象?当我bar通过write 声明一个对象时Foo(bar),我得到一个默认的初始化对象就好了,但是一旦我尝试传递一个参数,它就会失败。歧义如何解决?

标签: c++

解决方案


Foo(baz);相当于Foo baz;which显然是一个声明。

并且由于之前已经在同一范围内baz声明为类型的局部变量,您会收到重新定义错误。int


推荐阅读