我看到了这个:
std::tie(iter, inserted) = set_of_s.insert(value);
来自http://en.cppreference.com/w/cpp/utility/tuple/tie
std::tie
应该返回一个右值元组,然后将一个赋值运算符应用于它。这是怎么回事?我认为赋值运算符只能应用于左值?
答案 0 :(得分:2)
是的,内置=
运算符必须将左值作为左操作数。但是,这不是内置的=
运算符,就像它看起来一样。相反,它是对函数operator=
的调用,相当于:
std::tie(iter, inserted).operator=(set_of_s.insert(value));
类成员访问运算符.
不需要左操作数作为左值,所以一切都好。
附注:不要将表达式的值类别与lvalue / rvalue引用类型混淆。赋值运算符很可能将右值引用的名称作为其左操作数,因为其名称的表达式是左值。
答案 1 :(得分:2)
可以对rvalues应用哪些函数?
rvalue 可以是
this
参数传递const
左值参考它不能通过非const 左值引用传递。
这是如何运作的?
重载赋值运算符是一个成员函数,因此可以在 rvalue 上调用。
我认为赋值运算符只能应用于左值?
内置赋值运算符就是这种情况。重载运算符是函数,遵循与函数相同的规则。