c++ - 构造对象的歧义
问题描述
这是我写的一个例子:
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)
,我得到一个默认的初始化对象就好了,但是一旦我尝试传递一个参数,它就会失败。歧义如何解决?
解决方案
Foo(baz);
相当于Foo baz;
which显然是一个声明。
并且由于之前已经在同一范围内baz
声明为类型的局部变量,您会收到重新定义错误。int
推荐阅读
- c# - 统一网络 | 权限问题 - 玩家可以移动但不能独立射击
- git - 如何正确地将不同的“开发”分支合并到主分支中?
- react-native - React Native 中的 Meteor.connect 抛出错误(版本 0.61.5)
- php - PHP:松耦合参数化工厂。可能吗?
- vb.net - VB.NET 初始排序顺序
- javascript - Javascript日期时间戳混淆
- angular - 强制调用 ngOnDestroy 和 ngOnInit
- javascript - 为什么我的 GeoJSON 对象被 LeafletKNN 拒绝?
- c++ - 我可以让智能感知从(尚未)包含的文件中建议定义吗?
- css - 如何纠正 MS Edge 中出现的 CSS flex 问题?