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";
}
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";
}
他の人からも言われたように、問題はfunction
が何も返さないということです。この問題を解決する方法は、それはその引数を返すことです。
const std::string& function(std::string& var) {
var += "pre";
return var;
}
それに渡された文字列を変更します。この方法で、あなたはベクトルにそれをプッシュすることができるように、その文字列への参照を返します。
これは私があなたに感謝しています@pete Becker – rosti
'std :: string&'の代わりに 'const std :: string&'を返す理由はありますか?後者を使用する場合、コールをチェーンすることができます。 – NathanOliver
値で 'std :: string'を返すだけではどうですか?一般的には、値のセマンティクスは入力と出力の両方でいいです(生涯について考えるのが簡単です)。コンパイラはそれを最適化する可能性が非常に高く(RVO)、さらに 'push_back'を打ち込むとコピー*を支払うつもりです..迷惑ではありません。ここで 'const&'戻り値を使う理由は本当に厄介です(私は何かを学ぶかもしれません)。 –
'function'は' void'を返します... – Jarod42
あなたの関数は何も返しません... – NathanOliver
あなたは「戻り値」について話していますか?関数には「戻り値」はありません。 – AnT