以下是有效的 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;
array<T>::size()
is constexpr
,但你不能以这种方式使用它,因为a1
不是一个constexpr
价值。另外,它不能是constexpr
因为string
不是文字类型。
但是,如果您愿意,您可以通过推导来解决此问题size_t
模板参数。例子:
#include <string>
#include <array>
#include <iostream>
using namespace std;
template<typename>
struct array_size;
template<typename T, size_t N>
struct array_size<array<T,N> > {
static size_t const size = N;
};
array<string, 42> a1;
array<string, array_size<decltype(a1)>::size> a2;
int main() {
cout << a2.size() << endl;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)