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

时间:2019-01-04 14:18:10

标签: c++ qa-c

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

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

    void test1(int * var);

    void example1()
    {
        int var1[10];

        test1(var1);
    }

质量检查C ++告诉我

  

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

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

    void test2(int (&var)[10]);

    void example2()
    {
        int var2[10];

        test2(var2);
    }

这一次,它告诉我:

  

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

使用数组参数是否有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

原来的警告很好,第二个警告也正确。

这是由于数组会退化为指针,因此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样式的数组。