2013-04-11 107 views
0

好了,我知道如何從函數返回二維數組:C++返回常量二維數組

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

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

的問題是:我怎麼回不斷二維數組?我應該在哪裏放置const在線

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

+6

爲了您的理智,請使用'std :: array'這樣的東西。 – Pubby 2013-04-11 10:49:27

+1

*「我知道如何從函數返回2d數組」* - 不,你不知道,因爲這是不可能的。你知道的是如何從函數返回一個指向數組的指針。 – 2013-04-11 11:06:55

回答

1

之前int

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

啊,謝謝。更確切地說:const int(* getB()const)[5]。 – Nick 2013-04-11 10:51:18

+1

-1,這是解決他的問題,但這不是正確的做... – Turgal 2013-04-11 11:28:05

+0

@Turgal還有其他答案,這告訴正確的事情要做。我的答案只是回答問題,沒有別的。 – ForEveR 2013-04-11 11:39:15

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::arrayboost::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; } 
};