hereから Rvalue 参照を理解しようとしている間、私は2つのことを理解できません
- ベクトルに N 個の文字列がある場合、各コピーには N+1 個のメモリ割り当てと [...]
「N+1」のこの+1は何ですか?
2.筆者がいきなり以下のガイドラインにたどり着いた経緯
ガイドライン: 関数の引数をコピーしないでください。代わりに、それらを値で渡し、コンパイラーにコピーさせます。
何か不足していますか?
hereから Rvalue 参照を理解しようとしている間、私は2つのことを理解できません
- ベクトルに N 個の文字列がある場合、各コピーには N+1 個のメモリ割り当てと [...]
「N+1」のこの+1は何ですか?
2.筆者がいきなり以下のガイドラインにたどり着いた経緯
ガイドライン: 関数の引数をコピーしないでください。代わりに、それらを値で渡し、コンパイラーにコピーさせます。
何か不足していますか?
「N+1」のこの+1は何ですか?
新しいベクターの基になる配列を作成するための 1 つの割り当て、次にベクター内の N 個の文字列のそれぞれに 1 つずつ、N 個の割り当て。
筆者がいきなり以下のガイドラインにたどり着いた経緯
彼は、関数内で明示的にコピーを作成する代わりに、
std::vector<std::string>
sorted2(std::vector<std::string> const& names) // names passed by reference
{
std::vector<std::string> r(names); // and explicitly copied
std::sort(r);
return r;
}
関数に引数を渡すときに、コンパイラにコピーを作成させる必要があります。
std::vector<std::string>
sorted2(std::vector<std::string> names) // names passed by value
{ // and implicitly copied
std::sort(names);
return names;
}