使用std :: initialiser_list显式初始化变量

时间:2016-01-26 00:41:50

标签: c++ c++11 initializer-list

此代码

std::initializer_list<const char*> list {"something", "somthingElse" /*..*/};
const char* array[] = list; 
错误时

无法编译并出现以下错误:

array initializer must be an initializer list

因为我毕竟使用了initializer_list,所以无法真正理解我在这里做错了什么。

(我之所以使用initializer_list是因为我可以稍后在我的代码中使用list.size()几个部分;每次添加/时都需要调整一系列魔术常量的error_prone从列表中删除一些内容)

1 个答案:

答案 0 :(得分:1)

要初始化数组,您需要一个大括号括起来的初始化列表,它与std::initializer_list不同。

要获得您想要实现的目标,您可以使用std::array,但是您需要辅助函数来推断其大小参数:

#include <array>

template<typename T, typename... Ts>
constexpr std::array<T, sizeof...(Ts)> make_array(Ts... i)
{
    return {i...};
}

int main() {
    auto a = make_array<const char*>( "a", "b", "c", "d" );
    return a.size(); // I get an exit value of 4 here
}