【发布时间】:2016-12-20 07:14:22
【问题描述】:
我可以使用 std::initializer_list 对象而不是大括号括起来的初始化程序来初始化数组吗?
众所周知,我们可以这样做:http://en.cppreference.com/w/cpp/language/aggregate_initialization
unsigned char b[5]{"abc"};
// equivalent to unsigned char b[5] = {'a', 'b', 'c', '\0', '\0'};
int ar[] = {1,2,3};
std::array<int, 3> std_ar2{ {1,2,3} }; // std::array is an aggregate
std::array<int, 3> std_ar1 = {1, 2, 3};
但是我无法通过std::initializer_list il;初始化数组:
#include <iostream>
#include <initializer_list>
#include <array>
int main() {
int arr1[] = { 1, 2, 3 }; // OK
std::array<int, 3> arr2 = { 1, 2, 3 }; // OK
std::initializer_list<int> il = { 1, 2, 3 };
constexpr std::initializer_list<int> il_constexpr = { 1, 2, 3 };
//int arr3[] = il; // error
//int arr4[] = il_constexpr; // error
//std::array<int, 3> arr5 = il; // error
//std::array<int, 3> arr6 = il_constexpr; // error
return 0;
}
但是如何使用std::initializer_list il; 来初始化数组呢?
【问题讨论】:
-
Repoened.. “欺骗”是关于使用
{ .. }初始化成员数组的一般问题。这要求使用std::initializer_lists初始化std::类型(不允许对其进行更改!)。它们是截然不同的问题。 -
@Alex 你不能使用来自
algorithm(example) 的copy吗?
标签: c++ c++11 c++14 initializer-list c++17