2016-09-29 82 views
-1

我路過載體爲什麼無法使用矢量的方法獲取其自身輸出的返回矢量?

的微妙差異之間的困惑這是我的程序的某些部分

void print(vector<vector<char>>&field) 
vector<vector<char>> bomb(vector<vector<char>>&field) 

我遇到一個情況下,我不能做這樣的事情

print((bomb(bomb(field))); 

錯誤是

error: invalid initialization of non-const reference of type 'std::vector<std::vector<char> >&' from an rvalue of type 'std::vector<std::vector<char> >' 
      print(bomb(bomb(field))); 

但是,如果我的廣告DA常量的方法定義

void print(const vector<vector<char>>&field) 
vector<vector<char>> bomb(const vector<vector<char>>&field) 

那麼這將工作

是什麼

1. vector<vector<char>> bomb(vector<vector<char>>&field) 
3. vector<vector<char>> bomb(const vector<vector<char>>&field) 
4. vector<vector<char>> bomb(const vector<vector<char>>field) 

之間的差別,我相信1引用傳遞,一個載體,它就是我一直在做。如果沒有編譯器的抱怨,我怎麼會不會像炸彈(炸彈(字段))那樣做?

+0

'const'意味着再次什麼?重新考慮! –

+1

'Bomb(..)'正在返回一個臨時的'vector'。臨時不能綁定到非const引用參數。 –

+0

http://stackoverflow.com/q/1565600/873025 – Snps

回答

2

返回值bomb是一個對象,而不是一個引用。返回值是一個臨時對象。因此,當預期類型是非const引用時,不能使用它。

比喻用簡單的對象:

int foo(int& i) { return i+2; } 
void bar(int& i) {} 

// Can't use 
int i = 10; 
bar(foo(i)); 

這是一個問題,因爲foo返回臨時對象。它的返回值不能用作bar的參數,因爲bar需要一個非const引用。

如果bomb返回值可以更改爲參考,

vector<vector<char>>& bomb(const vector<vector<char>>&field); 

不破壞它是如何工作的,那麼你可以使用:

print((bomb(bomb(field)));