9
http://en.cppreference.com/w/cpp/language/member_functionsを読んでいるうちに、私は何かを見つけた、私は前に見たことがない:lvalue/rvalue Ref-qualified member functions
。彼らの目的は何ですか?Ref-qualifiedメンバ関数の目的は何ですか?
http://en.cppreference.com/w/cpp/language/member_functionsを読んでいるうちに、私は何かを見つけた、私は前に見たことがない:lvalue/rvalue Ref-qualified member functions
。彼らの目的は何ですか?Ref-qualifiedメンバ関数の目的は何ですか?
すぐ下ダウン読み取る:オーバーロード解決の間
、クラスXの非静的CV修飾メンバ関数があれば、CV修飾Xにタイプ左辺値参照の暗黙のパラメータを受け取る関数として扱われますそれはref-qualifierを持たないか、またはlvalue ref-qualifierを持っている場合です。 (それは右辺値REF-修飾子を有する場合)それ以外の場合は、そこでオーバーロード解決の間CV修飾X.
#include <iostream>
struct S {
void f() & { std::cout << "lvalue\n"; }
void f() &&{ std::cout << "rvalue\n"; }
};
int main(){
S s;
s.f(); // prints "lvalue"
std::move(s).f(); // prints "rvalue"
S().f(); // prints "rvalue"
}
に式右辺値参照の暗黙的なパラメータを取る関数として扱われますコンパイラは、呼び出し元オブジェクトがlvalue
である場合には& -qualifiedを、呼び出し元オブジェクトがrvalue
の場合には& & -qualifiedの関数を探します。
すべての非人間的な標準語句が明確かつ簡潔な例で補足されれば、この世界はどのくらい良いところになるでしょうか! –