默认定义的移动构造函数的 noexcept 规则是什么?

2024-02-16

特别是与std::vector重要的是类型是noexcept尽可能移动。

所以在声明移动构造函数时= default like in

struct Object1
{
    Object1(Object1 &&other) = default;
};

std::is_nothrow_move_constructible<Object1>::valuetrue作为每个成员(此处为 0)Object1是不可投掷移动可构造的,已回答here https://stackoverflow.com/questions/18290523/does-a-default-move-constructor-equals-to-a-member-wise-move-constructor.

然而,如果仅声明移动复制构造函数然后稍后会发生什么= default像下面的代码一样定义?

struct Object2
{
    Object2(Object2 &&other);
};
Object2::Object2(Object2 &&other) = default;

使用 g++ 4.9.2std::is_nothrow_move_constructible<Object2>::value is false我必须将声明和定义标记为noexcept做到这一点true.

现在我感兴趣的是实际规则是什么。 特别是自从第 22 条以来有效的现代 C++ https://rads.stackoverflow.com/amzn/click/com/1491903996(Scott Meyers)似乎提出了错误的建议,建议像我一样实现 pimpl-idiom move 构造函数Object2.


[dcl.fct.def.default]/p2:

如果函数在其第一个声明中显式默认,

  • 它被隐含地认为是constexpr如果隐式声明是,并且,
  • 它具有与隐式声明相同的异常规范(15.4)。

如果函数在稍后的声明中显式默认(如后面的示例所示),则这些规则不适用,因此,除了析构函数之外,该函数被视为noexcept(false)默认情况下,像大多数其他功能一样。

由于显式默认可以在不同的翻译单元中 - 在 pimpl 情况下,is在不同的 TU 中 - 编译器没有通用的方法可以在看到类定义后确定移动构造函数是否会抛出异常,除非该函数在类定义中显式默认(即在其第一次声明时)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认定义的移动构造函数的 noexcept 规则是什么? 的相关文章

  • 将数据集导出到 EXCEL

    我使用以下代码将数据库表中的字段导出到 Excel 中 我想要做的是能够编写一条 SQL 语句从多个表中检索字段并将其导出到 Excel 中 这段代码只允许我导出一张表 另外 如何显示保存提示对话框 示例代码将不胜感激 非常感谢 prote
  • 如何使用movntdqa避免缓存污染?

    我正在尝试编写一个 memcpy 函数 该函数不会将源内存加载到 CPU 缓存中 目的是避免缓存污染 下面的 memcpy 函数可以工作 但会像标准 memcpy 一样污染缓存 我正在使用带有 Visual C 2008 Express 的
  • VBA 中的 VSTO:AddIn.Object 有时不返回任何内容 (null)

    Given VSTO 插件 An override object RequestComAddInAutomationService 它返回一个名为的类的实例Facade在我的场景中 Excel 2007 中的 VBA 宏可访问AddIn O
  • WPF MVVM将DataTable绑定到DataGrid不显示数据

    我有一个简单的控件 其中包含一个 DataGrid 其中 ItemsSource 绑定到 DataTable 当我填充 DataTable 时 我可以看到 DataGrid 中添加了行 但没有显示任何数据 我没有为此 DataGrid 使用
  • 用 C++ 解密文件,该文件使用 openssl -aes-128-cbc 加密

    我正在尝试用 C 解密文件 该文件使用以下命令加密 openssl enc nosalt aes 128 cbc pass pass test in test txt out test enc txt p 控制台显示key 098F6BCD
  • 无法更新 .mdf 数据库,因为该数据库是只读的(Windows 应用程序)

    我使用 C 创建了一个数据库 Windows 应用程序 我的应用程序在 Windows XP 上成功运行 但在 Vista 或 Windows 7 系统上无法正确执行 我的应用程序显示类似以下内容的消息 无法更新 mdf 数据库 因为该数据
  • popen2()在c中如何工作?

    我尝试使用管道 叉子和 dup 在我的程序中执行 md5sume 命令 我发现总和代码运行成功 但我无法理解某些代码行 这是我的代码 int infp outfp char buf 128 if popen2 md5sum infp out
  • C++ 克隆惯用语中协变返回类型的用处?

    通常的克隆习惯使用协变返回类型 struct Base virtual Base clone struct Derived public Base Derived clone 我读过一些内容 大意是协变返回类型是 C 后来添加的 较旧的编译
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 使用 cryptoapi CryptImportKey 导入公钥时出错

    我想将公钥 blob 导入到 CSP 但发生了错误 BYTE pbData 0xEB 0x2A 0x38 0x56 0x86 0x61 0x88 0x7F 0xA1 0x80 0xBD 0xDB 0x5C 0xAB 0xD5 0xF2 0x
  • 如何使用 Caliburn.Micro MVVM 将焦点设置到控件

    我有一个表单 我想在发生某些用户操作时将焦点设置到文本框 我知道 MVVM 的处理方式是绑定到 VM 属性 但是 TextBox 没有允许这种情况发生的属性 从虚拟机设置焦点的最佳方法是什么 我创建了一个 IResult 实现 可以很好地实
  • 在 C# 中加密并在 Flex 中解密

    我需要解密 Flex 中的一些数据 这些数据是用 C 加密并写入文件的 为了简单起见 我选择使用 as3crypto As3 库和 Bruce Schneier C 库 AS3 as3加密链接 http code google com p
  • gcc 中的“假设”子句

    gcc 最新版本 4 8 4 9 是否有类似于以下的 假设 子句 assume 内置icc支持吗 例如 assume n 8 0 从 gcc 4 8 2 开始 gcc 中没有 assume 的等效项 我不知道为什么 这会非常有用 马夫索建议
  • 在同一条线上铸造两次

    我在项目中看到了这段代码 b的类型是void void b int a int unsigned long b 这条线毫无意义吗 我的意思是 这与a int b在所有情况下 这可能会避免 64 位 Unix 系统上的编译器警告unsigne
  • 在 C# 中将 ulong 映射到 long ?

    我正在尝试将 ulong 映射到 long 反之亦然 将 uint 映射到 int 反之亦然 如下所示 为了将值保存在具有签名类型的 MS SQL 数据库中仅限整数和大整数 我这样做是因为我必须检查 在数据库中 一个数字 uint ulon
  • jquery ajax“发布”调用

    我是 jQuery 和 Ajax 的新手 并且在 发布 方面遇到问题 我正在使用 jQuery Ajax post 调用将数据保存到数据库 当我尝试保存数据时 它将 null 传递给我的 C 方法 jQuery 看起来像这样 functio
  • 组合框由于某种原因被链接

    我有以下代码来填充 3 个组合框 private void PopulateDDLs SqlConnection connection SqlCommand command SqlDataReader reader DataTable dt
  • 如何并排显示 4 个三角形图案

    我无法让 4 个不同的三角形图案并排出现 这是一个控制台应用程序 这正是我试图通过使用嵌套 for 循环来实现的目标
  • 如果未返回,则在一段时间后终止线程

    我有一个线程从网络或串行端口获取一些数据 如果 5 秒内没有收到数据 则线程必须终止 或返回 false 换句话说 如果线程运行时间超过 5 秒 则必须停止 我用 C 编写 但任何 NET 语言都可以 有两种方法 1 封装超时 从网络或串行
  • 你将如何开始自动化我的工作? - 第2部分

    后续这个问题 https stackoverflow com questions 2796128 how would you start automating my job 在经历了第一波进货 9 小时的复制 粘贴 后 我现在相信我已经满足

随机推荐

  • 如何在 Google Optimize 中的 Document Ready 上运行 Javascript?

    如何在 Google 优化广告系列中的窗口加载或文档就绪时运行 javascript 它似乎允许我选择 DOM 元素一直到 Body 但我需要在文档准备好时运行 js 这就是我的做法 在可视化编辑器中编辑您的实验变体 单击选择元素图标 左上
  • Flutter (Dart) 如何在应用程序中点击时将副本添加到剪贴板?

    我是 Flutter 的初学者 我刚刚开始遵循他们的名称生成器应用程序教程并制作了一个简单的名称生成应用程序 我想知道当用户点击名称时是否可以添加复制到剪贴板功能 我尝试实现在堆栈上找到的解决方案 但它不起作用 我的完整代码在这里 任何建议
  • 检查Python中的字符串是否包含日期或时间戳[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要想出一个函数 它将接受一个字符串 它将执行以下操作 检查它是否是 UTC 格式的时间戳 例如 如果它的形式为2014 05 10T1
  • 为什么 scanf() 在某些情况下需要 & 运算符(地址),而在其他情况下不需要? [复制]

    这个问题在这里已经有答案了 为什么我们需要放一个 运算符在scanf 用于将值存储在整数数组中 但不能将字符串存储在字符数组中 int a 5 for i 0 i lt 5 i scanf d a i but char s 5 scanf
  • Keras LSTM:检查模型输入维度时出错

    我是 keras 的新用户 正在尝试实现 LSTM 模型 为了测试 我声明了如下所示的模型 但由于输入维度的差异而失败 虽然我在这个网站上发现了类似的问题 但我自己无法发现我的错误 ValueError Error when checkin
  • 在图像上写文字 查看图像

    目前 我正在开发一个应用程序 其中我有一个图像视图 图像不断 一段时间后发生变化 现在我希望我能够写一些文字或绘制任何符号 简单线 十字线意味着在图像上绘图出现在图像视图中 意思是我想要 在图像上添加文本或绘制一些符号或线条等 我到处寻找但
  • 如何删除所有 git origin 和 local 标签?

    如何删除已经推送的 git 标签 删除所有 git 远程 原始 标签并删除所有 git 本地标签 删除所有本地标签 可选推荐 git tag d git tag l 获取远程所有标签 可选推荐 git fetch 删除所有远程标签 Note
  • Angular 2 指令现在“可扩展”吗?

    我对 Angular 1 遇到的最大问题是扩展指令 在面向对象的意义上 是多么困难 例如 几乎不可能重复使用input number 我的自定义小部件上的指令 我必须重新实现所有验证和类型转换代码 Angular 2 组件是作为类实现的 因
  • Android WebView HTML5 Video Spawns MediaPlayer 永远存在于三星 S4 上 [找到了被黑的答案]

    据我所知 这似乎是最近的三星设备特有的 S4将做到这一点 Nexus 7 不会 如果带有 WebChromeClient 的 WebView 开始播放 HTML5 视频 它会创建一个 MediaPlayer 实例 一旦视频结束 似乎没有办法
  • 作曲家从私人仓库创建项目

    我有一个托管在 Bit Bucket 上的私人项目 我有一个 SSH 密钥设置 有什么办法我可以使用php composer create project vendor name path命令的方式与 Packagist 上的命令相同吗 好
  • std::atomic 是否正常工作?

    我正在阅读 Anthony Williams 的 C Concurrency in Action 第 5 章 其中讨论了新的多线程感知内存模型和原子操作 他指出 为了使用std atomic
  • 交替运行两个线程的最佳方法?

    更新 请参阅此问题的底部以获得完整的答案 我想运行一个辅助线程 以便我的主线程和辅助线程交替执行操作 不 我不想在主线程中执行所有操作 这是为了单元测试 我提出了两种不同的解决方案 我不知道哪个是最好的 并且我对第一个解决方案有疑问 使用交
  • 在 Swing 中显示 HTML

    我正在开发一个从服务器加载 HTML 文件并在 swing 中显示它们的项目 import java io import java net import java util regex import javax swing public c
  • Asp.Net 5 (Mvc 6) 中的自定义 ClaimsPrincipal

    我怎样才能覆盖默认值Context User类型的System Security Claims ClaimsPrincipal在 Asp Net 5 MVC 6 中 我想使用我的自定义用户类型 以便可以在控制器中访问它 HttpContex
  • JavaScript 检查资源是否可以通过 fetch 访问

    我基本上只是想验证是否可以从执行客户端访问资源 我不能使用XHR 因为目标资源不允许这样做 我对 JS 还很陌生 目前正在研究这个 此处可执行 https jsbin com hadoluqire edit html console out
  • Kotlin 数据类上的属性包含/排除

    假设我只想在生成的 equals 和 hashCode 实现中包含一两个字段 或者可能排除一个或多个字段 对于一个简单的类 例如 data class Person val id String val name String Groovy
  • CSS - 如何在导航标题之间添加点

    登录www linkedIn com后 右上角导航栏显示标题如下 Welcome XXX Skip to Content Search Add Connections Settings Help Sign Out 我想知道他们如何在不同标题
  • pkg_resources.DistributionNotFound:未找到“pipenv==2018.10.13”发行版,并且应用程序需要该发行版

    由于 ansible 的一些损坏的软件包 我重新安装了 pip 和 pipelinev 现在 看来我的 pip 依赖项都被搞砸了 非常感谢任何建议或帮助 which python2 usr local bin python2 which p
  • 在 Silverlight 中的 TextBlock 之后显示一行

    我正在 Silverlight 4 中处理数据表单 并希望按部分对元素进行分组 并为每个元素指定一个标题 标题由一个 TextBlock 和后面的水平线组成 该线一直延伸到表格的边缘 我已经尝试过以下操作 来自此线程 http forums
  • 默认定义的移动构造函数的 noexcept 规则是什么?

    特别是与std vector重要的是类型是noexcept尽可能移动 所以在声明移动构造函数时 default like in struct Object1 Object1 Object1 other default std is noth