int i {};
这是列表初始化还是值初始化?
我无法区分它们,因为我无法理解这句话:来自链接的可能为空的括号括起来的表达式列表或嵌套的括号初始化列表:https ://en.cppreference.com/w/cpp/language /list_initialization
int i {};
这是列表初始化还是值初始化?
我无法区分它们,因为我无法理解这句话:来自链接的可能为空的括号括起来的表达式列表或嵌套的括号初始化列表:https ://en.cppreference.com/w/cpp/language /list_initialization
这是列表初始化还是值初始化?
它是直接列表初始化
T object { arg1, arg2, ... }; (1)
直接列表初始化(考虑显式和非显式构造函数)
- 使用花括号初始化列表初始化命名变量(即,可能为空的括号括起来的表达式列表或嵌套的花括号初始化列表)
并且效果T
是值初始化
解释
T 类型对象的列表初始化的效果是:
[...]
- 否则,如果括号初始化列表没有元素,
T
则为值初始化。
现在对于int
eger 的值初始化,您将得到zero-initialized。
解释
在以下情况下执行值初始化:
[...]
- 否则,对象被零初始化。
是 List 还是 Value 初始化取决于您正在初始化的对象。请参阅https://en.cppreference.com/w/cpp/language/value_initialization:
如果 T 是一个没有默认构造函数但有一个构造函数采用 std::initializer_list 的类类型,则执行列表初始化。
因此,由于在这种情况下对象int
没有采用std::initializer_list且int
不是聚合类型的构造函数,因此这是值初始化。