簡體   English   中英

將數組作為函數中的引用參數傳遞

[英]Passing arrays as reference arguments in function

我試圖將兩個多維數組作為引用參數傳遞給C ++中的函數。

原型是這樣寫的:

void func(char (&foo)[4][4], char (&bar)[4][4]);

我的問題是第二個參數不能作為引用參數傳遞,而第一個參數卻可以。 如果更改它們的位置-(&foo)[4] [4]是第二個,反之亦然-foo不會作為引用傳遞,而bar會傳遞。

但是,如果添加第三個參數,則第二個參數將作為引用傳遞。

如何解決此問題而不必添加另一個無用的參數?

嘗試通過使用typedefs來最小化眾所周知的腳的尺寸:

typedef char charray44[4][4];

void foo(charray44 & one, charray44 & two);

這應該按預期工作; 如果不是這樣,那么您應該能夠建立一個簡單的測試工具,以弄清您在代碼中的哪個地方出錯了。

void foo(char (&one)[4][4], char (&two)[4][4]){
}

int main(){
    char one[4][4];
    char two[4][4];
    foo(one, two);
}

在MSVC,GCC和Clang上編譯良好。 您的問題出在其他地方。

作為Xeos解決方案的補充,解決此問題的一種更好的方法可能是封裝數組並通過引用傳遞新對象。

class matrix{
     std::vector<char> values;
     size_t x_sz, y_sz;
public:
     matrix(size_t x, size_t y) : values(x*y), x_sx(x), y_sz(y) {}

     char& get_at(size_t x, size_t y) 
     { return values[y*x_sz+x]; }

     const char& get_at(size_t x, size_t y) const
     { return values[y*x_sz+x]; }
 };

那么您就可以傳遞給funcs之類的。

   void f(const matrix& a);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM