此代码
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从列表中删除一些内容)
答案 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
}