专门针对右值的 std::swap

2024-04-21

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

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

是否有合法的方法来支持交换包含引用的右值 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';
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

专门针对右值的 std::swap 的相关文章

随机推荐

  • 通过 React Router 传递函数

    我想通过 React Router 将函数传递给子组件 我尝试了以下方法 但似乎不起作用 class App extends Component constructor props super props render return div
  • C++ 中的迭代合并排序

    我目前正在研究合并排序的迭代版本 但遇到了问题 当数组的特定大小如 34 35 36 或 100 仅几个示例 时 程序会崩溃 而它适用于其余数组 fe 适用于 2 的幂 我已经运行了一些测试并对其进行了调试 问题似乎出在我的迭代 合并排序的
  • PHP preg_functions 多字节安全吗?

    PHP 中没有可用的多字节 preg 函数 那么这是否意味着默认的 preg functions 都是 mb 安全的 在 php 文档中找不到任何提及 pcre 支持开箱即用的 utf8 请参阅 u 修饰符的文档 插图 xC3 xA4 是德
  • 下拉按钮/微调器类似于 Google 设计规范中的按钮

    我想知道如何制作一个下拉按钮 菜单 就像我们在 Google 的设计规范和下图中看到的那样 因此列表在按钮下方展开 我是否需要为其设置自定义布局而不是R layout support simple spinner dropdown item
  • 更改列表中每个字典的特定键的值 - python

    我有一个字典列表 如下所示 type df first from 2020 02 01T20 00 00 000Z to 2020 02 03T20 00 00 000Z days 0 coef 0 1 0 1 0 1 0 1 0 1 0
  • 匹配不同长度的时间向量:一个棘手的问题

    我有两组来自不同机器的测量结果 它们是随着时间的推移以略有不同的间隔进行测量的 例如一个每 5 分钟测量一次 而另一个每 3 分钟测量一次 优点是每 5 分钟计算一次 作为整个时间间隔的平均值 因此这些值应该大致对应 我想通过每 5 分钟
  • 返回 zip 以从 django 中的视图下载

    我尝试在 Django 应用程序中下载 zip 文件 我应该如何从视图中返回它 我尝试了下面的代码 但我在浏览器中收到了某种警报 其中包含我的 zip 中的文件内容 我究竟做错了什么 def download logs request da
  • 寻找优秀、可靠玩家的算法

    我有以下玩家 每个值对应于给定游戏中正确答案百分比的结果 players array A gt array 0 0 0 0 B gt array 50 50 0 0 C gt array 50 50 50 50 D gt array 75
  • 从另一个 Jenkinsfile 调用远程 jenkins 文件

    我正在我的组织中设计 Jenkins CICD 管道 我有以下问题 我来自一个 DevOps 团队 负责控制多个开发团队的 Jenkins 管道 我基本上想编写一个具有多个阶段的 Jenkins 文件 可以由多个团队运行 据我所知 这个 J
  • 两个列表中的公共元素

    我有两个ArrayList每个对象都有三个整数 我想找到一种方法来返回两个列表的共同元素 有人知道我该如何实现这一目标吗 Use Collection retainAll https docs oracle com en java java
  • 如何查找正在执行的 AppleScript 的文件名

    如何找到正在执行的 AppleScript 的名称 原因 我想创建一个根据文件名更改其行为的脚本 就像是 if myname is Joe then ACTION1 else if myname is Frank then ACTION2
  • Python 的 re 模块 - 保存状态?

    我发现 Python 中最大的烦恼之一是无法re模块来保存其状态 而无需在匹配对象中显式执行此操作 通常 人们需要解析行 如果它们符合某个正则表达式 则通过相同的正则表达式从中取出值 我想写这样的代码 if re match foo w b
  • Google Chrome 警告:密码表单应包含(可选隐藏)用户名字段以方便访问

    当访问我的单页应用程序的 重置密码 路径并查看 Chrome 浏览器控制台时 我收到以下警告 DOM 密码表单应具有 可选择隐藏 用户名字段以方便访问 更多信息 goo gl 9p2vKq
  • 如何解决 Yelp API 调用中的 CORS 错误?

    我尝试使用 AJAX 调用 Yelp Fusion API 但出现以下错误 有人可以帮我弄清楚这里发生了什么事吗 api yelp com v3 1 加载资源失败 服务器响应状态为 403 index html 1 从源 null 访问 h
  • 我应该使用哪些 gdb 命令来缩小标签“main”中出现分段错误的位置?

    这是我的汇编代码和我的主要子例程 这是我的宏和常量 text fmt string x t t ln x n sfmt string 10lf t 10lf n error string Error filename string inpu
  • 同一 IP 443 端口中的多个域

    我在 IIS 7 的端口 443 https 上托管了一个网站 www example1 com 现在我为同一 IP 的 www example2 com 购买了一个新域 我想在此域中托管另一个网站 www example2 com htt
  • Jquery 获取具有特定类的第 n 个子级

    我有一个 html 表如下 table tr td class take 1 td td 2 td td 3 td td class take 4 td td 5 td td class take 6 td tr tr td class t
  • 如何在 Java 8 中组合不同的流

    我有一个Set
  • 在代码中添加一个定时器,然后循环它

    尝试找到一种方法将计时器添加到我的代码中 然后用计时器不断循环它 例如 尝试通过单击按钮来制作物品 然后等待 5 秒以使其制作 然后只要我有材料 它就会自动开始再次制作 依此类推 我环顾四周的教程 但未能找到我一直在寻找的东西 这是我想要循
  • 专门针对右值的 std::swap

    在标准 20 2 2 utility swap 中 std swap 是为左值引用定义的 我知道这是当你想交换两件东西时的常见情况 但是 有时交换右值是正确且可取的 当临时对象包含引用时 如下所示 交换临时引用元组 https stacko