2013-04-11 2 views
0

Ну, я знаю, как вернуть 2d массив из функции:C++ возвращать константу 2d массив

struct S 
{ 
    int a[3]; 
    int b[4][5]; 

    int const *getA() const {return a;} 
    int (*getB())[5] {return b;} 
}; 

Вопрос: как я могу вернуть постоянную 2d массив? Где я должен разместить const в строке

int (*getB())[5] {return b;} 

?

+6

Ради вашего здравомыслия, используйте 'std :: array' для таких вещей. – Pubby

+1

* «Я знаю, как вернуть 2d-массив из функции» * - Нет, вы этого не сделаете, поскольку это невозможно. Вы знаете, как вернуть указатель на массив из функции. –

ответ

1

До int.

const int (*getB() const)[5] {return b;} 
+0

А, спасибо. Точнее: const int (* getB() const) [5]. – Nick

+1

-1, он решает свой вопрос, но это неправда ... – Turgal

+0

@Turgal есть другие ответы, которые говорят правду. Мой ответ просто отвечает на вопрос, больше ничего. – ForEveR

2

С помощью std::array вместо:

struct S 
{ 
    using arrayA_type = std::array<int, 3>; 
    using arrayB_type = std::array<std::array<int, 5>, 4>; 

    arrayA_type a; 
    arrayB_type b; 

    const arrayA_type& getA() const { return a; } 
    const arrayB_type& getB() const { return b; } 
}; 

Конечно, вы можете использовать обычные сырые массивы вместо этого, но это будет гораздо проще, если использовать тип-псевдоним для него, в другом слове нет путаницы, где положить const.

2

Упростите все это, используя std::array (или std::tr1::array или boost::array, если у вас нет поддержки C++ 11). Эти типы являются скопируемыми, присваиваемыми и их ссылочный синтаксис ясен:

#include <array> 

struct S 
{ 
    std::array<int, 3> a; 
    std::array<std::array<int, 5>, 4> b; 

    const std::array<int, 3>& getA() const {return a; } 
    const std::array<std::array<int, 5>, 4>& getB() const { return b; } 
};