简体   繁体   English

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

[英]Is this a list initialization or a value initialization?

int i {};

Is this List Initialization or Value Initialization ?这是列表初始化还是值初始化

I can't distinguish them because I can't understand this sentence: a possibly empty brace-enclosed list of expressions or nested braced-init-lists from the link: https://en.cppreference.com/w/cpp/language/list_initialization我无法区分它们,因为我无法理解这句话:来自链接的可能为空的括号括起来的表达式列表或嵌套的括号初始化列表: https : //en.cppreference.com/w/cpp/language /list_initialization

Is this List Initialization or Value Initialization?这是列表初始化还是值初始化?

It is direct-list-initialization它是 直接列表初始化

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

direct-list-initialization (both explicit and non-explicit constructors are considered)直接列表初始化(考虑显式和非显式构造函数)

  1. initialization of a named variable with a braced-init-list (that is, a possibly empty brace-enclosed list of expressions or nested braced-init-lists)使用花括号初始化器列表(即可能为空的花括号括起来的表达式列表或嵌套花括号初始化器列表)初始化命名变量

and the effect on T isvalue-initializationT的影响是值初始化

Explanation解释

The effects of list initialization of an object of type T are:类型 T 的对象的列表初始化的效果是:

[...] [...]

  • Otherwise, if the braced-init-list has no elements, T is value-initialized .否则,如果花括号初始化列表没有元素,则T值初始化的

And now for the value-initialization of int eger you get zero-initialized .现在对于int eger 的值初始化,您将得到zero-initialized

Explanation解释

Value initialization is performed in these situations:在这些情况下执行值初始化:

[...] [...]

  1. otherwise, the object is zero-initialized.否则,对象是零初始化的。

Whether it is a List or Value initialization depends on the object you are initializing.是 List 还是 Value 初始化取决于你正在初始化的对象。 Seehttps://en.cppreference.com/w/cpp/language/value_initialization :请参阅https://en.cppreference.com/w/cpp/language/value_initialization

If T is a class type that has no default constructor but has a constructor taking std::initializer_list, list-initialization is performed.如果 T 是一个没有默认构造函数但有一个采用 std::initializer_list 的构造函数的类类型,则执行列表初始化。

So since the object in this case in int which does not have a constructor taking a std::initializer_list and int is not an aggregate type, this isvalue initialization .因此,由于在这种情况下int的对象没有采用std::initializer_list的构造函数,并且int不是聚合类型,因此这是值初始化

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM