代码之家  ›  专栏  ›  技术社区  ›  Yves

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

  •  0
  • Yves  · 技术社区  · 3 年前
    int i {};
    

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

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

    0 回复  |  直到 3 年前
        1
  •  2
  •   JeJo    3 年前

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

    它是 direct-list-initialization

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

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

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

    以及对 T value-initialization

    解释

    类型为T的对象的列表初始化的影响如下:

    [...]

    • 否则 如果带括号的init列表没有元素, T 值已初始化 .

    现在是初始化的值 int 埃格,你明白了吗 zero-initialized .

    解释

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

    [...]

    1. 否则,对象初始化为零。
        2
  •  1
  •   nielsen    3 年前

    它是列表初始化还是值初始化取决于要初始化的对象。看见 https://en.cppreference.com/w/cpp/language/value_initialization :

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

    既然这件事中的物体 int 它没有一个构造函数 std::initializer_list int 不是聚合类型,这是 value initialization .