2015-08-06 5 views
0

Я хочу создать функцию, которая возвращает C-стиль многомерный массив
int mArray[2][2]; int[][] mArray getArray();Возвращение многомерного массива C++

так это не работает, и я не знаю, почему. Любая помощь будет оценена по достоинству.

+1

Даже если вы играете и получаете правильный синтаксис, вы не можете иметь встроенный массив в качестве возвращаемого типа. – chris

+3

Это может помочь решить этот вопрос, если вы объясните свою конечную цель. Вы пытаетесь вернуть «сетку» из 'int'? Вы пытаетесь реализовать интерфейс, совместимый с C? Вам интересно узнать о пыльных углах синтаксиса C++? –

+1

Я не могу добавить комментарий @DrewDormann. Даже если то, что вы просите, невозможно, почти всегда есть альтернативы. – user4581301

ответ

4

С [dcl.funct]:

Функции не должны иметь тип возвращаемого типа массива или функции, хотя они могут иметь тип возвращаемого указателя типа или ссылки на такие вещи. Массивов функций не должно быть, хотя могут быть массивы указателей на функции.

Вы можете, однако, возвращать std::array вместо:

std::array<std::array<int, 2>, 2> getArray(); 
+0

@Downvoter Что случилось? Это не так. – Barry

2

Вы не можете вернуть массив по значению, потому что они не копируют неявно (и потому, что стандарт говорит так). Вы должны использовать std::array вместо:

std::array<std::array<int,2>,2> fun(); 
std::array<std::array<int,2>,2> arr = fun(); 

Там не много причин для использования C-массивов над std::array в наше время, с наиболее распространенным, вероятно, быть «потому что мой учитель/проф/босс говорит так».

+0

спасибо, я учился сам, и мне было просто любопытно. – NTS716

Смежные вопросы