数组类型在函数调用中用作引用类型参数



我正在使用PRQA QA C++作为源代码分析器。

这是我分析的第一个代码:

    void test1(int * var);
    void example1()
    {
        int var1[10];
        test1(var1);
    }

QA C++告诉我

数组类型在函数调用中用作指针类型参数。

所以,我尝试了以下示例(如它所建议的那样):

    void test2(int (&var)[10]);
    void example2()
    {
        int var2[10];
        test2(var2);
    }

这一次,它告诉我:

数组类型在函数调用中用作引用类型参数。

有没有更好的解决方案来使用数组参数?

最初的警告很好,第二个警告也是真的。

这是由于数组衰减到指针,所以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 样式数组。

最新更新