我在另一个stackoverflow帖子(variable length array error when passing array using template deduction)上读到了以下内容:
#include <iostream>
int input() {
int a;
std::cin>>a;
return a;
}
int main()
{
const int b = input();
int sum[b];
std::begin(sum);
}
除了它似乎没有用之外,我仍然会遇到类似的错误。
In function 'int main()':
16:17: error: no matching function for call to 'begin(int [b])'
16:17: note: candidates are:
随后是可能适合的可能模板的信息。
答案 0 :(得分:1)
只有当std::begin(sum)
是常规数组时才可以使用sum
,而不是当它是可变长度数组时。
以下是好的。
const int b = 10;
int sum[b];
std::begin(sum);
在您的情况下,b
在编译时是未知的。对于编译时长度未知的数组,最好使用std::vector
而不是依赖于编译器特定的扩展。以下是好的。
const int b = input(); // You can use int b, i.e. without the const, also.
std::vector<int> sum(b);
std::begin(sum);