std::initializer_list 什么时候可以简单构造?

When is std::initializer_list trivially constructible?

在我看来,我认为当用于初始化std::initializer_list<T>的类型Ts...的对象可以用来平凡构造T时,那么std::initializer_list<T>是平凡可构造的来自 Ts... 因为根据 list initializationstd::initializer_list<T> 的每个元素要么是 direct_initialized 要么是 copy_initialized.

但是,我不确定我是否正确,所以我发布了这个。

问题本身没有意义。也就是说,您询问 属性 是否存在 属性 根本不适用的操作。

6 个特殊成员函数(默认构造函数、copy/move constructor/assignment 运算符和析构函数)可能很简单。但这些是 仅有的 可能微不足道的事情,"trivial" 一词具有明确定义的含义。

列表初始化不执行任何这些操作。至少,不是直接的。

列表初始化 initializer_list 的过程涉及创建一个临时数组,将 braced-init-list 中的值放入其中,并创建指向该数组的 initializer_list . None 其中的操作甚至是微不足道的,因此询问它们是否 "trivial" 没有意义。