gpt4 book ai didi

c++ - 在编译时获取 std::array 中的元素数量

转载 作者:IT老高 更新时间:2023-10-28 12:54:07 27 4
gpt4 key购买 nike

以下是有效的 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()constexpr ,但不能这样使用,因为 a1不是 constexpr值(value)。另外,不能是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;
}

关于c++ - 在编译时获取 std::array 中的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16866033/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com