gpt4 book ai didi

c++ - 具有 std::array 和 c 样式数组成员的可变参数模板结构之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:05 25 4
gpt4 key购买 nike

所以最近我尝试制作以下结构:

template<int... Factors>
struct Data
{
static constexpr int arr[sizeof...(Factors)] = {Factors...};
};
int main()
{
Data<1, 2, 3> p;
cout << p.arr[0] << " " << p.arr[1] << " " << p.arr[2] << endl;
return 0;
}

而且效果很好。

但是如果我切换 static constexpr int arr[sizeof...(Factors)] = {Factors...};static constexpr std::array<int, sizeof...(Factors)> arr {Factors...};上面的代码给我发送了一个

undefined reference to 'Data<1,2,3>::arr'

错误。

由于我对可变参数模板还很陌生,所以我想知道这两者之间有什么区别,为什么会出现错误?

最佳答案

你应该加上这个

template <int ... Factors>
constexpr std::array<int, sizeof...(Factors)> Data<Factors...>::arr;

在结构之外。

我建议使用双层大括号进行初始化

static constexpr std::array<int, sizeof...(Factors)> arr { { Factors... } };

关于c++ - 具有 std::array 和 c 样式数组成员的可变参数模板结构之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39687261/

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