gpt4 book ai didi

c++ - 为右值特化 std::swap

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:43:33 25 4
gpt4 key购买 nike

在标准 (20.2.2 [utility.swap]) 中,std::swap 是为左值引用定义的。我知道当你想交换两件事时,这是常见的情况。然而,有时交换右值是正确且可取的(当临时对象包含引用时,如下所示:swap temporary tuples of references)。

为什么右值没有重载?对右值进行无意义交换的风险是否超过潜在 yield ?

是否有合法的方式来支持交换包含引用的右值 std::tuple 对象?对于用户定义的类型,我会特化 swap 以按值接受其参数,但对于像 std::tuple 这样的库类型做同样的事情似乎不太合乎规范。

最佳答案

如何创建一个将右值转换为左值的 lvalue_cast 实用函数:

#include <tuple>
#include <iostream>

template <class T>
T&
lvalue_cast(T&& t)
{
return t;
}

int
main()
{
int i = 1;
int j = 2;
swap(lvalue_cast(std::tie(i)), lvalue_cast(std::tie(j)));
std::cout << i << '\n';
std::cout << j << '\n';
}

关于c++ - 为右值特化 std::swap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22079128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com