2017-06-27 2 views
-11

push_back関数更新値を持つベクトルにはなぜ許可されませんか?ベクトルの関数から値を直接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'は' void'を返します... – Jarod42

+2

あなたの関数は何も返しません... – NathanOliver

+2

あなたは「戻り値」について話していますか?関数には「戻り値」はありません。 – AnT

答えて

5

他の人からも言われたように、問題はfunctionが何も返さないということです。この問題を解決する方法は、それはその引数を返すことです。

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

それに渡された文字列を変更します。この方法で、あなたはベクトルにそれをプッシュすることができるように、その文字列への参照を返します。

+0

これは私があなたに感謝しています@pete Becker – rosti

+2

'std :: string&'の代わりに 'const std :: string&'を返す理由はありますか?後者を使用する場合、コールをチェーンすることができます。 – NathanOliver

+0

値で 'std :: string'を返すだけではどうですか?一般的には、値のセマンティクスは入力と出力の両方でいいです(生涯について考えるのが簡単です)。コンパイラはそれを最適化する可能性が非常に高く(RVO)、さらに 'push_back'を打ち込むとコピー*を支払うつもりです..迷惑ではありません。ここで 'const&'戻り値を使う理由は本当に厄介です(私は何かを学ぶかもしれません)。 –

関連する問題