gpt4 book ai didi

c++ - 如何将 VLA 传递给函数模板?

转载 作者:行者123 更新时间:2023-11-30 02:48:54 26 4
gpt4 key购买 nike

我有以下无法编译的代码。

using namespace std;
void f(int);
template<typename T1, size_t N>
void array_ini_1d(T1 (&x)[N])
{
for (int i = 0; i < N; i++)
{
x[i] = 0;
}
}

如果 main 如下所示,传递数组的正确方法是什么。

int main()
{
int a;
cin >> a;
int n = a / 4;
f(n);
return 0;
}

void f(int n)
{
int arr[n];
array_ini_1d(arr);
}

错误:没有可调用 array_ini_1d 的匹配函数......

最佳答案

问题是可变大小数组不受 c++ 支持,仅作为编译器扩展支持。这意味着,该标准没有说明应该发生什么,您应该查看是否可以在编译器的文档中找到,但我怀疑是否记录了此类极端情况。

所以,这就是问题所在:

int arr[n];

解决方案是避免它,并使用 c++ 支持的东西,例如 std::vector

关于c++ - 如何将 VLA 传递给函数模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21747921/

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