Я прочитал фрагмент кода и обнаружил, что есть такая функция.
int (*function())[10]{
...
}
Я смущен. Что означает эта функция и что она вернет?
Я прочитал фрагмент кода и обнаружил, что есть такая функция.
int (*function())[10]{
...
}
Я смущен. Что означает эта функция и что она вернет?
Это определение функции, которая возвращает указатель на массив из 10 целых чисел.
Помните, что возвращаемое значение является указателем, а не фактическим массивом. Массивы не могут быть возвращены из функций. По пункту 8.3.5/8 стандарта:
Функции не должны иметь тип возвращаемого типа массива или функции, хотя у них может быть тип возвращаемого типа указателя типа или ссылка на такие вещи
Вот простой пример того, как вы его используете:
int arr[10]; // an array of 10 int
int (*ptr)[10]; // pointer to an array of 10 int
int (*function())[10] // function returning a pointer to an array of 10 int
{
return ptr;
}
int main()
{
int (*p)[10] = function(); // assign to the pointer
}
Вы можете использовать это везде, где обычно используется указатель. Но обратите внимание, что есть лучшие альтернативы, чем указатели, например std::shared_ptr<std::array<T, N>>
или std::shared_ptr<std::vector<T>>
.
Способ чтения состоит в том, чтобы найти самый левый идентификатор и выйти из него, вспомнив, что привязка ()
и []
до *
, поэтому *a[]
- это массив указателей, (*a)[]
- это указатель на массив, *f()
- это функция, возвращающая указатель, а (*f)()
- указатель на функцию. Таким образом,
function - function
function() - is a function
*function() - returning a pointer
(*function())[10] - to a 10-element array
int (*function())[10] - of int
это означает, что это указатель на функцию, а аргумент недействителен и возвращает int [10]