'* this'機能への右辺値参照がない場合の回避策では、次のメンバー関数(変換演算子)が表示されます。
template< class T >
struct A
{
operator T&&() && // <-- What does the second '&&' mean?
{
// ...
}
};
2番目のペアは&&
どういう意味ですか?私はその構文に精通していません。
'* this'機能への右辺値参照がない場合の回避策では、次のメンバー関数(変換演算子)が表示されます。
template< class T >
struct A
{
operator T&&() && // <-- What does the second '&&' mean?
{
// ...
}
};
2番目のペアは&&
どういう意味ですか?私はその構文に精通していません。
これはref-value修飾子です。基本的な例を次に示します。
// t.cpp
#include <iostream>
struct test{
void f() &{ std::cout << "lvalue object\n"; }
void f() &&{ std::cout << "rvalue object\n"; }
};
int main(){
test t;
t.f(); // lvalue
test().f(); // rvalue
}
出力:
$ clang++ -std=c++0x -stdlib=libc++ -Wall -pedantic t.cpp
$ ./a.out
lvalue object
rvalue object
ここから撮影。
これは、関数が右辺値でのみ呼び出すことができることを示しています。
struct X
{
//can be invoked on lvalue
void f() & { std::cout << "f() &" << std::endl; }
//can be invoked on rvalue
void f() && { std::cout << "f() &&" << std::endl; }
};
X x;
x.f(); //invokes the first function
//because x is a named object, hence lvalue
X().f(); //invokes the second function
//because X() is an unnamed object, hence rvalue
ライブデモ出力:
f() &
f() &&
お役に立てば幸いです。