#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})
{}