我可以将移动的变量标记为不再可用,并在使用它时收到编译器警告吗?

2024-02-23

有时在我使用的函数中std::move传递我不再使用的变量,如下所示:

void f(std::vector<int> v)
{
    for (int i: v)
    {
        std::cout << i << ", ";
    }
}

void main()
{
    std::vector<int> v(1000);
    std::fill(v.begin(), v.end(), 42);
    f(std::move(v));
}

我了解 std::move 使我的向量处于有效状态,所以我可以调用v.clear()如果我想的话,可以重复使用它。但在一个长函数中,我稍后可能会向其中添加更多代码,但却忘记了我的移动函数丢失了数据,从而引入了错误。

我可以在移动之后放置某种编译器指令来警告我不要重用此变量吗?像这样:

void main()
{
    std::vector<int> v(1000);
    std::fill(v.begin(), v.end(), 42);
    f(std::move(v));
    #pragma mark_unusable(v);

    // This should trigger a compiler warning
    v[5] = 10;
}

部分答案:您可以使用clang-tidy以其移动后使用容易出错 https://clang.llvm.org/extra/clang-tidy/checks/bugprone-use-after-move.html查看。这不抓到v.clear()在你的例子中,但至少在其他情况下是这样。例子:

clang-tidy -checks=bugprone-use-after-move your-file.cpp

当你添加第二个时f(std::move(v));第一次调用后,这会给你

your-file.cpp:15:17: warning: 'v' used after it was moved [bugprone-use-after-move]
f(std::move(v));
            ^
your-file.cpp:14:5: note: move occurred here
f(std::move(v));
^
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将移动的变量标记为不再可用,并在使用它时收到编译器警告吗? 的相关文章

  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 为什么在 C++ 中声明枚举时使用 typedef?

    我已经很多年没有写过任何 C 了 现在我正试图重新开始 然后我遇到了这个并考虑放弃 typedef enum TokenType blah1 0x00000000 blah2 0X01000000 blah3 0X02000000 Toke
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • make_shared<>() 中的 WKWYL 优化是否会给某些多线程应用程序带来惩罚?

    前几天我偶然看到这个非常有趣的演示 http channel9 msdn com Events GoingNative GoingNative 2012 STL11 Magic Secrets作者 Stephan T Lavavej 其中提
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 如何使用 C# 查询远程 MS ACCESS .mdb 数据库

    我正在尝试使用 C 查询 mote MS ACCESS 数据库 mdb 文件 将文件复制到本地计算机时可以成功查询它 我只想远程放置文件 所以我的客户端程序不包含原始数据 static string m path http www xyz
  • C 与 C++ 中的 JNI 调用不同?

    所以我有以下使用 Java 本机接口的 C 代码 但是我想将其转换为 C 但不知道如何转换 include
  • 在 C++ 代码 gdb 中回溯指针

    我在运行 C 应用程序时遇到段错误 在 gdb 中 它显示我的一个指针位置已损坏 但我在应用程序期间创建了 10 万个这样的对象指针 我怎样才能看到导致崩溃的一个 我可以在 bt 命令中执行任何操作来查看该指针的生命周期吗 谢谢 鲁奇 据我
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 使用 Unity 在 C# 中发送 http 请求

    如何使用 Unity 在 C 中发送 HTTP GET 和 POST 请求 我想要的是 在post请求中发送json数据 我使用Unity序列化器 所以不需要 新的 我只想在发布数据中传递一个字符串并且能够 将 ContentType 设置
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 不使用放置 new 返回的指针时的 C++ 严格别名

    这可能会导致未定义的行为吗 uint8 t storage 4 We assume storage is properly aligned here int32 t intPtr new void storage int32 t 4 I k
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 在 C 中使用 #define 没有任何价值

    If a define没有任何价值地使用 例如 define COMMAND SPI 默认值是0吗 不 它的评估结果为零 从字面上看 该符号被替换为空 然而 一旦你有了 define FOO 预处理器条件 ifdef FOO现在将是真的 另
  • 运行 xunit 测试时无法将输出打印到控制台窗口

    public class test2InAnotherProject private readonly ITestOutputHelper output public test2InAnotherProject ITestOutputHel

随机推荐

  • 按多维数组 PHP 的特定键排序

    我有一个数组的数组 内部数组看起来像这样 Array comparisonFeatureId gt 1188 comparisonFeatureType gt Category comparisonValues gt Array 0 gt
  • 每秒更新 TextView

    我环顾四周 到目前为止我所尝试的一切似乎都不起作用 Override protected void onCreate Bundle savedInstanceState super onCreate savedInstanceState s
  • 素数惰性列表

    如何在 Haskell 中实现素数列表以便可以延迟检索它们 我是 Haskell 的新手 想了解惰性求值功能的实际用途 这是一个简短的 Haskell 函数 用于枚举素数识字计划 https web archive org web 2010
  • (SSL Pinning) 设备上的公钥 CA 如何检查服务器的证书

    我的设备上的 CA 如何检查数字签名是真是假 如果黑客获得了我的数字签名 他们是否可以将我的数字签名和他们自己的公钥结合起来并将证书发送给客户端 如果是这样 客户端如何知道证书不是来自正确的服务器 结论 我想知道如何检查服务器的数字签名 他
  • 从sql server获取windows用户登录名

    我的数据库配置为使用带有登录名的 SQL Server 身份验证sa 现在我想知道用户的Windows登录用户名 SA 将为每个人提供帮助 我能够获取计算机的 IP 地址和计算机名称 但我迫切需要用户的 Windows 登录用户名 顺便说一
  • cell.contentView systemLayoutSizeFittingSize:不适用于动态高度表格视图

    我尝试在自定义 uitableviewcell 中使用自动布局 并尝试根据这个SO主题实现动态高度 在 UITableView 中使用自动布局来实现动态单元格布局和可变行高 https stackoverflow com questions
  • 如何在 Flask 视图中获取 url 参数

    我正在尝试从烧瓶视图中获取 url 参数 www domain com f x 2 如何得到x 2来自url在烧瓶视图中 您可以使用检索查询字符串变量 request args get myParam or request args myP
  • 如何在 OpenGL ES 2.0 中绘制抗锯齿线?

    我正在尝试绘制一些已存储为顶点数组的轮廓 typedef struct float vertices int nrPoints VertexCurve list
  • 将一个数组的顺序与另一个数组的顺序相匹配

    我有一个正确排序的 ID 的 int 数组 然后我有一个具有 ID 属性的无序对象数组 我想按与 int 数组的顺序匹配的 ID 对对象进行排序 类似的东西 newObjectArray oldObjectArray MatchOrderB
  • 页面上相同资源类型的简单形式多种形式

    我正在使用 simple form 为相同的资源类型创建表单 它工作正常 但由于所有输入都具有相同的 id 所以我在 javascript 上遇到了一个问题 例如 如果我的型号是汽车 字段是品牌 则所有 lteh 表单上该字段的所有输入都具
  • 链接身份哈希集

    我都知道IdentityHashSet http docs oracle com javase 7 docs api java util IdentityHashMap html via Collections newSetFromMap
  • GitPython 标签排序

    我正在尝试使用 GitPython lib 获取存储库中的最新标签 通常我是这样做的 repo Repo project root last tag str repo tags 1 但是一旦版本 1 10 发布 我总是得到 1 9 我知道它
  • 我们如何在 Perl 中创建唯一 ID

    我想创建一个UniqueId 是否有一个我可以调用的函数 这样每次我使用它时 它都会给我一个新的 Id 并且总是具有不同的值 Use 数据 UUID http search cpan org rjbs Data UUID 1 219 UUI
  • 单个单词的 Spacy 词形还原

    我正在尝试获取单个单词的词形还原版本 有没有办法使用 spacy 神奇的 python NLP 库 来做到这一点 下面是我尝试过的代码 但这不起作用 from spacy lemmatizer import Lemmatizer from
  • Nginx 别名指令不适用于 php

    我有一个在 Nginx 上运行的应用程序 其工作服务器块如下所示 server listen 80 server name example com root home deployer apps my app current index i
  • Bower 安装错误

    现在我已经安装了 Node 和 Npm 并在终端中运行此命令 是的 我在 Mac 上 npm install g bower 接下来是终端的输出 npm http GET https registry npmjs org bower npm
  • data.frame(mm[ -1], surv.t = surv.t, cens = cens) 中的错误:参数暗示不同的行数:146, 0

    我在 R 中运行 BMA 包来进行 CoxPH 测试 我想知道我应该编辑什么数据 以便解决这个问题 参数暗示不同的行数 146 0 library BMA data lt read csv Test1 csv header TRUE x l
  • golang中如何解析表单数组 Beego

    如何使用 Beego 解析 html 表单数组
  • 滑出动画在后按按钮上不起作用?

    我在进入或退出活动时使用动画 进入活动动画效果很好 但退出动画效果不佳 当我按下后退按钮时 我开始退出动画 发生的情况是它首先开始输入当前活动的动画 然后显示最后一个活动 我想要一个简单的后退按钮按下时的退出动画 Slide out xml
  • 我可以将移动的变量标记为不再可用,并在使用它时收到编译器警告吗?

    有时在我使用的函数中std move传递我不再使用的变量 如下所示 void f std vector