【发布时间】:2015-02-17 18:57:46
【问题描述】:
我试图理解这两种初始化方式之间的语义差异:
Foo foo{x};
Foo foo = {x};
我很想知道以下情况的区别:
-
x的类型为Foo。 -
Foo有一个构造函数,它接受与 x 相同类型的参数。 -
x不是Foo类型,但可以使用转换构造函数。 -
x不是Foo类型,但可以使用explicit转换构造函数。
我的意思是,在每种情况下:
- 从概念上讲,调用了哪些构造函数?
- 编译器通常会优化掉哪些构造函数调用?
- 是否允许隐式转换?
【问题讨论】:
-
你做过任何研究吗? cppreference 几乎涵盖了有关列表初始化的所有知识。
-
没有“显式转换构造函数”之类的东西。而且我不确定您要在 2) 和 3) 之间做出什么样的区分。
-
投了反对票,因为你没有做任何研究。仅当信息不存在时,问题才有用。