作者:云中之锦书 | 来源:互联网 | 2022-11-30 16:57
这是我写的一个例子:
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
通过写入声明一个对象时Foo(bar)
,我得到一个默认的初始化对象就好了,但是一旦我尝试传递一个参数,它就会失败.模糊性是如何解决的?
1> Deduplicator..:
Foo(baz);
等同于Foo baz;
显然是一个声明.
并且由于baz
已经int
在同一范围内声明为早期类型的局部变量,因此会出现重新定义错误.