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

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

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

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

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

0

Решение

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]