【发布时间】:2013-06-01 06:26:17
【问题描述】:
以下是有效的 C++ 代码吗?为什么不是?
std::array<std::string, 42> a1;
std::array<int, a1.size()> a2;
它不能在 GCC 4.8(在 C++11 模式下)编译。有一个简单但不优雅的解决方法:
std::array<std::string, 42> a1;
std::array<int, sizeof(a1)/sizeof(a1[0])> a2;
很明显,编译器可以计算出 std::array 中元素的数量。为什么 std::array::size() 不是constexpr static 函数?
编辑: 我找到了另一种解决方法:
std::array<std::string, 42> a1;
std::array<int, std::tuple_size<decltype(a1)>::value> a2;
【问题讨论】:
-
你在使用
-std=c++0x标志吗? -
对了,是clearly
constexpr()。 -
与其给
a1一个大小,然后给a2同样大小,为什么不直接创建一个像size_t x=42这样的变量,然后同时创建一个大小的a1和a2的x? -
@Lorkenpeist:因为也许你有
auto a1 = some_function<some_template_argument>(); -
元组大小的解决方案非常好。专门为此目的为 std::array 重载了该函数(请参阅here)
标签: c++