【问题标题】:Is this a list initialization or a value initialization?这是列表初始化还是值初始化?
【发布时间】:2021-12-19 06:56:41
【问题描述】:
int i {};

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

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

【问题讨论】:

    标签: c++ c++11 syntax initialization braced-init-list


    【解决方案1】:

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

    direct-list-initialization

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

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

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

    T的影响是value-initialization

    说明

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

    [...]

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

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

    说明

    在这些情况下执行值初始化:

    [...]

    1. 否则,对象被零初始化。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多