什么函数可以应用于右值?

时间:2014-01-23 16:57:11

标签: c++

我看到了这个:

std::tie(iter, inserted) = set_of_s.insert(value);

来自http://en.cppreference.com/w/cpp/utility/tuple/tie

std::tie应该返回一个右值元组,然后将一个赋值运算符应用于它。这是怎么回事?我认为赋值运算符只能应用于左值?

2 个答案:

答案 0 :(得分:2)

是的,内置=运算符必须将左值作为左操作数。但是,这不是内置的=运算符,就像它看起来一样。相反,它是对函数operator=的调用,相当于:

std::tie(iter, inserted).operator=(set_of_s.insert(value));

类成员访问运算符.不需要左操作数作为左值,所以一切都好。

附注:不要将表达式的值类别与lvalue / rvalue引用类型混淆。赋值运算符很可能将右值引用的名称作为其左操作数,因为其名称的表达式是左值。

答案 1 :(得分:2)

  

可以对rvalues应用哪些函数?

rvalue 可以是

  • 作为成员函数的this参数传递
  • 按值传递
  • 通过const 左值参考
  • 传递
  • 通过 rvalue 引用传递。

它不能通过非const 左值引用传递。

  

这是如何运作的?

重载赋值运算符是一个成员函数,因此可以在 rvalue 上调用。

  

我认为赋值运算符只能应用于左值?

内置赋值运算符就是这种情况。重载运算符是函数,遵循与函数相同的规则。