36

'* this'機能への右辺値参照がない場合の回避策では、次のメンバー関数(変換演算子)が表示されます。

template< class T >
struct A
{
    operator T&&() && // <-- What does the second '&&' mean?
    {
        // ...
    }
};

2番目のペアは&&どういう意味ですか?私はその構文に精通していません。

4

2 に答える 2

32

これは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

ここから撮影。

于 2013-03-10T07:43:29.767 に答える
28

これは、関数が右辺値でのみ呼び出すことができることを示しています。

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() &&

お役に立てば幸いです。

于 2013-03-10T07:41:26.170 に答える