我看到了:
std::tie(iter, inserted) = set_of_s.insert(value);
来自http://en.cppreference.com/w/cpp/utility/tuple/tie
std::tie
应该返回rvalue元组,但随后将分配操作员应用于它。这是如何工作的?我认为任务操作员只能应用于lvalue?
哪些功能可以应用于rvalues?
an rvalue 可以是
- 通过成员函数的
this
参数 - 按价值通过
- 由
const
lvalue 参考 - 通过 rvalue 参考。
non-const lvalue 参考。
这是如何工作的?
超载分配运算符是成员函数,因此可以在 rvalue 。
上调用。我认为任务操作员只能适用于lvalue?
内置分配运营商就是这种情况。超载运算符是函数,遵循与函数相同的规则。
是的,内置的=
操作员必须在其左操作数中具有lvalue。但是,这不是外观的内置=
操作员。相反,它是对函数operator=
的调用,等效于:
std::tie(iter, inserted).operator=(set_of_s.insert(value));
类成员访问操作员.
不需要其左操作数即可成为lvalue,所以一切都可以。
旁注:不要将表达式的值类别与lvalue/rvalue参考类型混淆。任务运算符很可能以左操作数为rvalue参考的名称,因为它的名称是lvalue。