std::initializer_list 什么时候可以简单构造?
When is std::initializer_list trivially constructible?
在我看来,我认为当用于初始化std::initializer_list<T>
的类型Ts...
的对象可以用来平凡构造T
时,那么std::initializer_list<T>
是平凡可构造的来自 Ts...
因为根据 list initialization,std::initializer_list<T>
的每个元素要么是 direct_initialized
要么是 copy_initialized
.
但是,我不确定我是否正确,所以我发布了这个。
问题本身没有意义。也就是说,您询问 属性 是否存在 属性 根本不适用的操作。
6 个特殊成员函数(默认构造函数、copy/move constructor/assignment 运算符和析构函数)可能很简单。但这些是 仅有的 可能微不足道的事情,"trivial" 一词具有明确定义的含义。
列表初始化不执行任何这些操作。至少,不是直接的。
列表初始化 initializer_list
的过程涉及创建一个临时数组,将 braced-init-list 中的值放入其中,并创建指向该数组的 initializer_list
. None 其中的操作甚至是微不足道的,因此询问它们是否 "trivial" 没有意义。
在我看来,我认为当用于初始化std::initializer_list<T>
的类型Ts...
的对象可以用来平凡构造T
时,那么std::initializer_list<T>
是平凡可构造的来自 Ts...
因为根据 list initialization,std::initializer_list<T>
的每个元素要么是 direct_initialized
要么是 copy_initialized
.
但是,我不确定我是否正确,所以我发布了这个。
问题本身没有意义。也就是说,您询问 属性 是否存在 属性 根本不适用的操作。
6 个特殊成员函数(默认构造函数、copy/move constructor/assignment 运算符和析构函数)可能很简单。但这些是 仅有的 可能微不足道的事情,"trivial" 一词具有明确定义的含义。
列表初始化不执行任何这些操作。至少,不是直接的。
列表初始化 initializer_list
的过程涉及创建一个临时数组,将 braced-init-list 中的值放入其中,并创建指向该数组的 initializer_list
. None 其中的操作甚至是微不足道的,因此询问它们是否 "trivial" 没有意义。