std::move 可以移动内置类型或 C 指针或数组吗

2024-01-03

我有 3 个问题:

  1. Can std::move移动内置类型?
int a = 10;
int b = std::move(a);

Will a是无效值吗?


  1. Can std::move移动指针
int *a = new int[10];
int *b = std::move(a);

Will a成为无效指针或nullptr?


  1. can std::move移动 C 数组?
struct S {
  int array[10];
}
S a;
for(int i=0; i<10; i++)
  a.array[i]=1;
S b;
b = std::move(a);

Will a.array变成无效数组?


move它本身什么也不做,而是static_cast。根据cppreference.com https://en.cppreference.com/w/cpp/utility/move

它完全等同于 static_cast 到右值引用类型。

因此,它取决于您在之后分配给的变量的类型move,如果类型有constructors or assign operators需要一个右值参数,它可能也可能不steal原始变量的内容,因此,它可能会将原始变量保留在unspecified state:

除非另有指定,否则所有已移出的标准库对象都将置于有效但未指定的状态。

回到你的问题,因为没有什么特别的move constructor or move assign operator对于内置文字类型(例如整数和原始指针),因此,它将只是这些类型的简单副本。因此,对于问题 1 和问题 2,a生效后仍然有效且未更改move。由于C++不允许对C数组直接赋值,因此问题3中的代码无法编译。

- - 编辑 - -

您最初的第三个问题是将一个普通的 C 数组分配给另一个数组,这是该语言不允许的。

您更新的第三个问题有所不同,它在结构中嵌入了一个 C 数组,现在您将一个结构分配给另一个结构,该结构现在可以编译。因为你没有move assign operator对于您的结构,调用默认的赋值运算符,它执行字节级复制,因此,a移动和分配后没有变化。

仅当结构的所有成员都是 POD(纯旧数据)时才会发生这种情况。如果将非 POD 成员添加到结构中,则赋值语句将无法编译,因为它无法使用默认的“字节级复制”赋值运算符来复制非 POD 成员(例如,字符串对象)。

struct S {
  std::string something;  // non-POD member
  int array[100];
};
S a, b;
b = std::move(a);  // this line will not compile
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

std::move 可以移动内置类型或 C 指针或数组吗 的相关文章

  • clang 格式换行符在错误的位置

    给出以下代码行 get abc manager get platform status abc platform status sw update status fill update status actions allowed stat
  • 内联函数/方法

    声明 内联函数必须在调用之前定义 这个说法正确吗 EDIT 该问题最初是德语 内联功能穆森 弗 伊赫雷姆 奥夫鲁夫定义 sein 也许它对任何人都有帮助 是的 它是正确的 但只是部分正确 它可能正确地重新构建如下 内联函数必须在每个翻译单位
  • Subversion 和 Visual Studio 项目的最佳实践

    我最近开始在 Visual Studio 中处理各种 C 项目 作为大型系统计划的一部分 该系统将用于替换我们当前的系统 该系统是由用 C 和 Perl 编写的各种程序和脚本拼凑而成的 我现在正在进行的项目已经达到了颠覆的临界点 我想知道什
  • C 程序从连接到系统的 USB 设备读取数据

    我正在尝试从连接到系统 USB 端口的 USB 设备 例如随身碟 获取数据 在这里 我可以打开设备文件并读取一些随机原始数据 但我想获取像 minicom teraterm 这样的数据 请让我知道我可以使用哪些方法和库来成功完成此操作以及如
  • 如何尝试/捕获所有异常

    我正在完成由其他人启动的 UWP 应用程序 该应用程序经常崩溃 我总是陷入困境应用程序 at if global System Diagnostics Debugger IsAttached global System Diagnostic
  • 从 C 结构生成 C# 结构

    我有几十个 C 结构 我需要在 C 中使用它们 典型的 C 结构如下所示 typedef struct UM EVENT ULONG32 Id ULONG32 Orgin ULONG32 OperationType ULONG32 Size
  • 如何创建用于 QML 的通用对象模型?

    我想知道是否有任何宏或方法如何将 Qt 模型注册为 QObject 的属性 例如 我有AnimalModel http doc qt io qt 5 qtquick modelviewsdata cppmodels html qabstra
  • 如何使用MySqlCommand和prepare语句进行多行插入?(#C)

    Mysql 给出了如何使用准备语句和 NET 插入行的示例 http dev mysql com doc refman 5 5 en connector net programming prepared html http dev mysq
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 将带有 glut 的点击坐标添加到向量链接列表中

    我想创建一个向量链接列表 并在 GLUT 库的帮助下获取点击的位置并将它们附加到链接列表中 这些是我写的结构 typedef struct vector int x int y Vector typedef struct VectorLis
  • 两种类型的回发事件

    1 我发现了两篇文章 每篇文章对两种类型的回发事件的分类都略有不同 一位资源说两种类型的回发事件是Changed事件 其中控件实现 IPostbackDataHandler 当数据在回发之间更改时触发 然后Raised事件 其中控件实现 I
  • C# 委托责任链

    为了我的理解目的 我实现了责任链模式 Abstract Base Type public abstract class CustomerServiceDesk protected CustomerServiceDesk nextHandle
  • 预处理后解析 C++ 源文件

    我正在尝试分析c 使用我定制的解析器的文件 写在c 在开始解析之前 我想摆脱所有 define 我希望源文件在预处理后可以编译 所以最好的方法是运行C Preprocessor在文件上 cpp myfile cpp temp cpp or
  • 从 R 到 C 处理列表并访问它

    我想使用从 R 获得的 C 列表 我意识到这个问题与此非常相似 使用 call 在 R 和 C 之间传递数据帧 https stackoverflow com questions 6658168 passing a data frame f
  • .NET 客户端中 Google 表格中的条件格式请求

    我知道如何在 Google Sheets API 中对值和其他格式进行批量电子表格更新请求 但条件格式似乎有所不同 我已正确设置请求 AddConditionalFormatRuleRequest formatRequest new Add
  • C 中带有指针的结构的内存开销[重复]

    这个问题在这里已经有答案了 我意识到当我的结构包含指针时 它们会产生内存开销 这里有一个例子 typedef struct int num1 int num2 myStruct1 typedef struct int p int num2
  • 受限 AppDomain 中的代码访问安全异常

    Goal 我需要在权限非常有限的 AppDomain 中运行一些代码 它不应该访问任何花哨或不安全的内容 except对于我在其他地方定义的一些辅助方法 我做了什么 我正在创建一个具有所需基本权限的沙箱 AppDomain 并创建一个运行代
  • C++、三元运算符、std::cout

    如何使用 C 用三元运算符编写以下条件 int condition1 condition2 condition3 int double result int or double std cout lt lt condition1 resul
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque

随机推荐

  • 选择 SQL Server 数据库大小

    我怎样才能查询我的sql服务器只获取数据库的大小 我用过这个 use MY DB exec sp spaceused 我懂了 database name database size unallocated space My DB 17899
  • 以数组形式返回 sql 查询

    我正在使用 jqueryui 及其自动完成插件 它使用 json 来提取项目 我想修改它 以便从我的数据库中提取项目 物品应该是这样的 items array Great em Bittern em gt Botaurus stellari
  • 检查文本是否为 HTML

    我正在使用 Meteor 我正在尝试检查文本是否为 html 但通常的方法不起作用 这是我的代码 post function var postId Session get postId var post Posts findOne id p
  • RGB 到 HSI 以及 HSI 到 RGB 转换

    我正试图掩饰RGB to HSI并恢复它 该任务需要从头开始 In RGB to HSI转换 饱和度和强度输出都很好 但我似乎没有明白Hue的表述有什么问题 示例输出 Red 255 Green 255 Blue 255 Hue 21474
  • Nginx LetsEncrypt 错误“/etc/letsencrypt/options-ssl-nginx.conf”没有这样的文件或目录

    我正在尝试使用 LetsEncrypt 和 Nginx 添加 https 我已经添加了 certbot 并且它运行成功 然后 当尝试运行 Nginx 服务器时 我收到此错误 docker entrypoint sh docker entry
  • EF4 CTP5 的存储库模式

    我正在尝试使用 ef4 ctp5 实现存储库模式 我想出了一些东西 但我不是 ef 方面的专家 所以我想知道我所做的是否是好事 这是我的数据库上下文 public class Db DbContext public DbSet
  • 用户输入和命令行参数[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何拥有可以接受用户输入的 Python 脚本 如果从命令行运行 如何让它读取参数 要读取用户输入 您可以尝试the cmd modu
  • 使用给定的部分大小列表将 Scala 列表拆分为多个部分。[分区]

    我有两个清单 val list1 List Int List 5 2 6 val list2 List Any List a b c d e f g h i j k 这样list1 sum gt list2 size 我想要一个由 list
  • UIWebview 使用 javascript 在移动 safari 中打开 URL

    所以我正在使用 Phaser 构建一个 HTML5 游戏 并且有一个按钮可以调用 javascript 中的 URL 如下所示 window open http google com blank 这在桌面上在新窗口中打开时效果很好 我也可以
  • 使用 WS-Security 连接到 Java SOAP Web 服务的 WCF 客户端

    我在使用 SOAP 1 1 连接到 Java Web 服务的 NET WCF 客户端时遇到问题 该服务需要通过 SSL 进行传输级加密 并使用 WS Security 协议进行 SOAP 安全性 两者都使用相同的证书 我已安装证书并且可以连
  • 需要有关 Play 2.2 子模块以及其他模块作为依赖项的项目布局的建议

    我有一个带有模块的现有 SBT 项目 我想将 Play 2 2 作为子模块添加到我的项目中 这个新的 Play 模块将依赖于其他模块 到目前为止我发现的主要是 Play 是带有支持模块的主要项目 如果 Play 确实支持此设置 请为我指出正
  • Dart RegExp 字边界等效项

    我尝试在我的 flutter 应用程序中匹配包含确切单词 world 的单词和句子 我认为最好的方法是使用单词边界 我的正则表达式如下所示 String str world var regexp RegExp b str b caseSen
  • 如何从俄语Excel中的日期获取英文月份名称?

    我无法在 Excel 中获取月份名称 Neither TEXT mmmm 不不行 我发现 尽管有语言设置 但只有俄罗斯 M 正在工作并提供俄语月份名称 拉丁M什么也没给出 是否有其他设置可以强制月份名称语言 UPDATE 设置日期格式国籍没
  • 单引号字符

    反引号 和 是单引号的两个不同字符 我有一个 mysql 脚本 显示前两个引号字符 如果我将它们更改为 则会破坏语法 如何从键盘输入 You are referring to the character commonly called a
  • 我收到 java.lang.classnotfoundException: com.mysql.jdbc.Driver

    How come I get this error Check the picture 我在普通的 java 项目 不是 android 项目 上使用了相同的 jar 它曾经可以工作 怎么了 You re getting a NoClass
  • 从java调用gnuplot? (Ubuntu)

    我不确定这是否可行 特别是因为 Java 通过虚拟机运行 但我可以从 Java 中调用 gnuplot 吗 也许我可以让 Java 打开一个终端并输入 gnuplot plot etc Use gnujavaplot http gnujav
  • 有没有办法禁止电子邮件引擎自动超链接 URL?

    我的一位客户想要禁用 URL 显示为超链接 URL 它必须被识别为纯文本 这是我尝试过的 a href url a 我也尝试过删除 a a 标签 以及删除 URL 中的 http 但它们在 Outlook 中都不起作用 Outlook 仍然
  • GLSL 中的多个纹理 - 只有一个有效

    我的问题是在 GLSL 着色器中获取多个纹理 这就是我正在做的 Shader uniform sampler2D sampler0 uniform sampler2D sampler1 uniform float blend void ma
  • Swift 用户默认值 - 数组

    以下代码出现错误 二元运算符 不能应用于 String 类型的操作数 和 字符串 func loadDefaults let userDefaults UserDefaults standard object forKey storedAr
  • std::move 可以移动内置类型或 C 指针或数组吗

    我有 3 个问题 Can std move移动内置类型 int a 10 int b std move a Will a是无效值吗 Can std move移动指针 int a new int 10 int b std move a Wil