無意味です。あなたは関数内のものを変更し、実際には一時的なものだったので、変更はすぐに失われます。
新しいタイプの理由は、実際に何が評価値であるかを決定する必要があるからです。それだけであなたは実際に彼らが使用されているクールなもののためにそれらを使用することができます。 「あなたには、いくつかの右辺値を持っており、それがTOUPPERに渡す場合、我々は、一時はとにかく使い捨てのものである知っているので、今
string toupper(string && s) { // for nonconst rvalues
for(char &c : s) make_uppercase(c);
return move(s); // move s into a returned string object
}
string toupper(string const& s) { // for the rest
// calls the rvalue reference version, by passing
// an rvalue copy.
return toupper(string(s));
}
は、右辺値を直接変更することができますので、我々はそれとドンを変更するだけでaswellすることができますそれをコピーする必要はありません。また、移動コンストラクターや移動割り当てと呼ばれるものについても同じことが言えます。右手側はコピーされませんが、その物はちょうど盗まれて*this
に移動されます。
右辺値が非左辺値参照にバインドできるとすれば、最後に左辺値(名前付きオブジェクト)または右辺値(一時的)を参照するかどうかを判断できません。
それはおそらくより少し知っているのですが、とにかく便利、あなたはメンバ関数に左辺値または右辺値REF-修飾子を置くことができます。ここでは、自然に暗黙のオブジェクトパラメータに右辺値参照の既存のセマンティクスを拡張する例です:今
struct string {
string& operator=(string const& other) & { /* ... */ }
};
は、あなたはもう言うことができない混乱で、作りは本当にないです
string() = "hello";
ほとんどの時間を感じます。上記の&
がしていることは、代入演算子は左辺値に対してのみ呼び出すことができるということです。右辺値については、&&
とすることで同じことができます。
なぜこれが3つの票を得たのだろうと思ったのですか?私はそれを投票せずに質問を好きになったとは思っていません。(私が投票に失敗したり、ロックされていない限り) – Zifre
私はなぜ誰かが何らかの形で考えているのだろうと思っています。 – user534498
私はなぜ「うまくやってアップフォートを与えるの?」が不合理な期待だと思っています。 –