パラメータをコピーせずに関数に渡すことは可能ですか?パラメータが '通過'されるために右辺値参照を使用できますか?
のは、例を作ってみましょう:
std::string check(std::string in, int &maxLen)
{
maxLen = std::max(maxLen, in.length());
return in;
}
//main:
int maxCnt = 0;
std::cout
<< check("test, ", maxCnt)
<< check("two tests, ", maxCnt)
<< check("three tests, ", maxCnt)
<< maxCnt;
// would output: "test, two tests, three tests, 13"
私のC++コンパイラfooが、これはすでに離れて最適化することができるならば言って十分ではありません。
check(...)
のシグニチャは、一時的な引数がとなるように見えるようにする必要があります。はコピーされません。
私の最初の推測されました:
std::string && check(std::string &&in, int &maxLen)
これが正しければ、実装は次のように何に見えるのでしょうか?
備考:あなたが入力のいずれかのコピーを回避したい場合
std::string
はプレースホルダで、それがどの複合型- で動作するはず重複質問
を渡す:最後の呼び出しでのオーバーロードの解決が選んだだろう
:上
check()
定義して、まとめると( 'const')参照... – rubenvb
@rubenvb' 'std :: string check(std :: string const&in、int&maxlen)'は、入力が左辺値であるか一時的であるかにかかわらずコピーしませんか? –
( 'const')参照も返す必要があります。そうでなければ、戻り値を構築する必要があります。 – rubenvb