数组类型在函数调用中用作引用类型参数
Array type is used as a reference type argument in the function call
我正在使用 PRQA QA C++ 作为源代码分析器。
这是我分析的第一个代码:
void test1(int * var);
void example1()
{
int var1[10];
test1(var1);
}
QA C++ 告诉我
Array type is used as a pointer type argument in the function call.
因此,我尝试了以下示例(如建议的那样):
void test2(int (&var)[10]);
void example2()
{
int var2[10];
test2(var2);
}
这一次,它告诉我:
Array type is used as a reference type argument in the function call.
是否有更好的解决方案来使用数组参数?
原来的警告没问题,第二个警告也是。
这是由于数组退化为指针,所以var1
,最初整数数组可以用在需要指针的表达式中。
如果你真的想删除这些,有几个选项:
std::array<int, 10> var1;
test1(var1.data());
更好的:
void test2(std::array<int, 10>& var);
void example2()
{
std::array<int, 10> var2;
test2(var2);
}
那么第二个选项固定数组的大小。如果它需要可变但在编译时固定,请使用模板,否则使用 std::vector
而不是 C 样式数组。
我正在使用 PRQA QA C++ 作为源代码分析器。
这是我分析的第一个代码:
void test1(int * var);
void example1()
{
int var1[10];
test1(var1);
}
QA C++ 告诉我
Array type is used as a pointer type argument in the function call.
因此,我尝试了以下示例(如建议的那样):
void test2(int (&var)[10]);
void example2()
{
int var2[10];
test2(var2);
}
这一次,它告诉我:
Array type is used as a reference type argument in the function call.
是否有更好的解决方案来使用数组参数?
原来的警告没问题,第二个警告也是。
这是由于数组退化为指针,所以var1
,最初整数数组可以用在需要指针的表达式中。
如果你真的想删除这些,有几个选项:
std::array<int, 10> var1;
test1(var1.data());
更好的:
void test2(std::array<int, 10>& var);
void example2()
{
std::array<int, 10> var2;
test2(var2);
}
那么第二个选项固定数组的大小。如果它需要可变但在编译时固定,请使用模板,否则使用 std::vector
而不是 C 样式数组。