默认定义的移动构造函数的 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 规则是什么? 的相关文章

  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 使用管道在父级和子级之间传递整数值

    我对如何正确使用 pipeline 在两个进程之间传递整数值有点困惑 在我的程序中 我首先创建一个管道 然后分叉它 我假设我有 两个 管道 据我了解 这是我的任务 我的父母通过 for 循环检查某个操作的整数值 i 增加计数变量 并将值保存
  • 来自 double 的 static_cast 可以优化分配给 double 吗?

    我偶然发现了一个我认为不必要的功能 并且通常让我感到害怕 float coerceToFloat double x volatile float y static cast
  • CMake(Ninja 后端)使用 /MT 编译

    我有一个类似的问题CMake 使用 MT 而不是 MD 进行编译 https stackoverflow com questions 14172856 cmake compile with mt instead of md但有一些差异 我正
  • 如何以编程方式删除受信任的根证书颁发机构中的证书?

    我需要能够从组织中的每台电脑中删除特定的证书 是的 我可以逐个座位 但我要到周四才能完成 而且我没有人力逐个座位 是否有使用 C 的编程方式来执行此操作 我认为你不需要编写任何 C 看看certmgr exe del http msdn m
  • Visual Studio 2013 调试器显示 std::string 的奇怪值

    我有一个大型的 cmake 生成的解决方案 其中包含许多项目 由于某种原因 我无法查看字符串的内容 因为根据调试器 Bx Buf含有一些垃圾 text c str 正确返回 Hello 该问题不仅仅发生在本地字符串上 返回的函数std st
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • 如何在 C 中链接目标文件?失败并显示“架构 x86_64 的未定义符号”

    因此 我尝试在我的文件 file2 c 中使用另一个 C file1 c 文件中定义的函数 为了做到这一点 我包含了 file1 file1 h 的标头 但是 每当我尝试使用 gcc 编译文件时 我都会收到以下错误 Undefined sy
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 如何在 C++ 中正确使用 cin.fail()

    我正在编写一个程序 从用户那里获取整数输入cin gt gt iUserSel 如果用户输入一个字母 程序就会进入无限循环 我试图用下面的代码来阻止这种情况 但程序进入无限循环并打印出 错误 输入 我该如何修复我的程序 cin gt gt
  • main.cpp 是必需的吗?

    我试图编译一个程序cmake 我最终删除了我的main cpp文件 我刚刚将其复合到另一个包含我的项目名称的文件中 即 我刚刚将主函数剪切并粘贴到该文件中 问题是我有一个main cpp未发现错误 不确定是否在C 一个名为main cpp是
  • MINIX内部碎片2

    我正在用 C 语言编写一些软件 它递归地列出给定目录中的所有文件 现在我需要计算出内部碎片 我花了很长时间研究这个问题 发现 ext2 上的内部碎片只发生在最后一个块中 我知道理论上你应该能够从索引节点号获得第一个和最后一个块地址 但我不知
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • c++ - <未解析的重载函数类型>

    在我的班级里叫Mat 我想要一个将另一个函数作为参数的函数 现在我有下面 4 个函数 但是在调用 print 时出现错误 第二行给了我一个错误 但我不明白为什么 因为第一行有效 唯一的区别是功能f不是班级成员Mat but f2是 失败的是
  • 跟踪白色背景中的白球(Python/OpenCV)

    我在 Python 3 中使用 OpenCV 来检测白场上的白 黑球 并给出它的精确 x y 半径 和颜色 我使用函数 cv2 Canny 和 cv2 findContours 来找到它 但问题是 cv2 Canny 并不总是检测到圆的完整
  • 如何配置 qt Creator 以显示 C++ 代码而不是反汇编程序?

    昨天我做了很多事情 比如更新 GCC Clang 和重新安装 Qt Creator 今天 在逐步调试我的代码时 调试器显示的是反汇编代码 而不是我编写的 C 代码 紧迫F10 or F11 调试器正在进入汇编代码而不是 cpp nor h我
  • java有类似C#的属性吗? [复制]

    这个问题在这里已经有答案了 C 属性 我的意思是 get 和 set 方法 是一个非常有用的功能 java 也有类似 C 的属性吗 我的意思是我们如何在 java 中实现类似以下 C 代码的内容 public string Name get
  • 如何将模型绑定到动态创建的类 nancyfx

    首先感谢任何愿意查看我的问题的人 我对 Nancyfx 还很陌生 在尝试将 JSON 有效负载绑定到动态创建的类时遇到问题 我按照这篇文章中的代码动态创建了该类 在C 中动态创建一个类 https stackoverflow com que
  • Adobe Illustrator 中的折线简化如何工作?

    我正在开发一个记录笔划的应用程序 您可以使用定点设备来绘制笔划 在上图中 我绘制了一个笔划 其中包含 453 个数据点 我的目标是大幅减少数据点的数量 同时仍然保持原始笔画的形状 对于那些感兴趣的人 上图笔画的坐标可以作为GitHub 上的
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen

随机推荐

  • 如何在 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