【发布时间】:2017-06-21 05:32:26
【问题描述】:
为什么std::initializer_list 不支持std::get<>、std::tuple_size 和std::tuple_element?它现在在constexpr 表达式中被大量使用,例如,
std::max({1, 2, 3, 4, 5});
如果它确实很酷,像下面这样的事情是可能的
auto [x, y] = {1, 2};
那么为什么std::initializer_list 不支持这些?据我所知,没有办法在运行时构造std::initializer_list,因此大小始终由用户固定。
以下是如何在编译时获取std::intializer_list<> 大小的示例
#include <iostream>
#include <initializer_list>
using std::cout;
using std::endl;
template <typename...> struct WhichType;
template <typename Type>
constexpr int size_init_list(std::initializer_list<Type> il) {
return il.end() - il.begin();
}
int main() {
constexpr auto size = size_init_list({1, 2, 3});
cout << static_cast<int>(std::integral_constant<int, size>{}) << endl;
return 0;
}
【问题讨论】:
-
@downvoter 为什么投反对票?
-
自动 i = randint(0,1) ? std::initializer_list
{1, 2} : std::initializer_list {1, 2, 3, 4, 5, 6, 7}; -
为什么不直接结束 - 开始?
标签: c++ c++11 c++17 initializer-list structured-bindings