Я использую 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.
Других решений пока нет …