Используйте список инициализаторов в качестве значения по умолчанию для параметра функции/метода

#c #default-value #method-parameters

Вопрос:

Я хочу сделать что-то вроде

 void A (int a[2] = {0,0}) {}
 

но я понимаю

 <source>(1): error C2440: 'default argument': cannot convert from 'initializer list' to 'int []'
<source>(1): note: The initializer contains too many elements
 

(Последняя версия MSVC v19 x64, также не работает с gcc x86-64 11.2)

Опять же, я не могу понять, что c позволяет считать здесь правильным синтаксисом.

Ответ №1:

Причина, по которой это не работает, заключается в том, что это

 void A (int a[2]) {}
 

это просто короткая запись от руки для

 void A (int* a) {}
 

Вы не можете передавать массивы по значению функциям. Они распадаются на указатели на первый элемент. Если вы используете a std::array<int,2> , вы можете легко указать аргумент по умолчанию:

 void foo(std::array<int,2> x = {2,2}) {}
 

Ответ №2:

Кроме того, вы можете передать необработанный массив по ссылке const:

 void A(const int (amp;arr)[2] = {2, 2})
{}