C++ 什么是&&;函数签名末尾的平均值(右括号后)?

C++ 什么是&&;函数签名末尾的平均值(右括号后)?,c++,C++,在中,我看到以下成员函数(转换运算符): 模板 结构A { 运算符T&&()&&&/表示函数只能在右值上调用 struct X { //can be invoked on lvalue void f() & { std::cout << "f() &" << std::endl; } //can be invoked on rvalue void f() && { std::cout <

在中,我看到以下成员函数(转换运算符):

模板
结构A
{

运算符T&&()&&&/表示函数只能在右值上调用

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

希望对您有所帮助。

这是一个ref值限定符。下面是一个基本示例:

// 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
}

取自。

&&ref限定符:所有声明
T()
都有一个ref限定符:是的,我发现13.3.1请注意,根据,使用
f()
f()&
重载是不合法的-“不允许在r值参考版本和非参考版本之间重载”@DanNissenbaum:是的,我的LWS演示显示了这一点。但由于电源故障,我无法立即发布。现在更新它。谢谢。LWS是什么意思?我无法通过谷歌找到它-几乎没有“LWS”的结果。LWS代表我展示演示的地方。
f() &
f() &&
// 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