在标准库中(20.2.2 [utility.swap]),std::swap被定义为左值引用。我理解这是交换两个物品时的普遍情况。然而,在某些情况下,交换rvalue是正确和可取的(例如当临时对象包含引用时,像这里:swap temporary tuples of references)。
为什么没有为rvalues重载呢?是否在rvalues上进行无意义交换的风险超过了潜在的好处?
是否有一种合法的方法来支持交换包含引用的rvalue std::tuple对象?对于用户定义类型,我会专门化swap以按值接受其参数,但似乎不适用于像std::tuple这样的库类型。
为什么没有为rvalues重载呢?是否在rvalues上进行无意义交换的风险超过了潜在的好处?
是否有一种合法的方法来支持交换包含引用的rvalue std::tuple对象?对于用户定义类型,我会专门化swap以按值接受其参数,但似乎不适用于像std::tuple这样的库类型。