2
int i {};

这是列表初始化还是值初始化

我无法区分它们,因为我无法理解这句话:来自链接的可能为空的括号括起来的表达式列表或嵌套的括号初始化列表:https ://en.cppreference.com/w/cpp/language /list_initialization

4

2 回答 2

2

这是列表初始化还是值初始化?

它是直接列表初始化

T object { arg1, arg2, ... }; (1)

直接列表初始化(考虑显式和非显式构造函数)

  1. 使用花括号初始化列表初始化命名变量(即,可能为空的括号括起来的表达式列表或嵌套的花括号初始化列表)

并且效果T值初始化

解释

T 类型对象的列表初始化的效果是:

[...]

  • 否则,如果括号初始化列表没有元素, T则为值初始化

现在对于integer 的值初始化,您将得到zero-initialized

解释

在以下情况下执行值初始化:

[...]

  1. 否则,对象被零初始化。
于 2021-11-05T09:14:47.363 回答
1

是 List 还是 Value 初始化取决于您正在初始化的对象。请参阅https://en.cppreference.com/w/cpp/language/value_initialization

如果 T 是一个没有默认构造函数但有一个构造函数采用 std::initializer_list 的类类型,则执行列表初始化。

因此,由于在这种情况下对象int没有采用std::initializer_listint不是聚合类型的构造函数,因此这是值初始化

于 2021-11-05T09:14:56.213 回答