2017-06-27 26 views
-11

push_back對於帶有函數更新值的向量,不允許爲什麼?爲什麼我不能直接從vector中的函數push_back更新值?

std::vector<std::string>goin; 
goin.push_back(function(somestringvalue)); // why cant it take update value? 

void function(std::string& var) 
{ 
    var += "pre"; 
} 
+4

'function' returns'void' ... – Jarod42

+2

因爲你的函數沒有返回任何東西... – NathanOliver

+2

你在說什麼「返回值」?你的函數沒有任何「返回值」。 – AnT

回答

5

正如其他人所說的,問題是function不會返回任何東西。解決這個問題的辦法是將它返回它的參數:

const std::string& function(std::string& var) { 
    var += "pre"; 
    return var; 
} 

這樣,它修改則傳遞給它的字符串,並將其返回到該字符串的引用,這樣就可以將其推入載體。

+0

這就是我在尋找的謝謝@pete Becker – rosti

+2

是否有理由返回一個'const std :: string&'而不是'std :: string&'?如果你使用後者,你可以鏈接電話。 – NathanOliver

+0

爲什麼不直接按值返回一個'std :: string'?一般來說,價值語義在輸入和輸出上都很好(更容易推理生命週期),編譯器極有可能對其進行優化(RVO),此外,一旦你點擊了'push_back' ..不要討厭;對於你在這裏使用'const&'返回值的原因真的很有趣(我可能會學到一些東西)。 –

相關問題