Тип массива используется в качестве аргумента ссылочного типа в вызове функции - PullRequest
0 голосов
/ 04 января 2019

Я использую 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);
    }

На этот раз мне сказали:

Тип массива используется в качестве аргумента ссылочного типа в вызове функции.

Есть ли лучшее решение использовать параметр массива?

1 Ответ

0 голосов
/ 04 января 2019

Исходное предупреждение в порядке, второе предупреждение также верно.

Это связано с тем, что массивы распадаются на указатели, поэтому 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.

...