在第一次声明后将函数声明为默认函数

2023-11-22

In 8.4.2 Explicitly-defaulted functions [dcl.fct.def.default]标准的,

显式默认函数和隐式声明函数是 统称为默认函数,并且实现应 为它们提供隐式定义(12.1 12.4,12.8),这可能 意味着将它们定义为已删除。一个特殊的成员函数是 用户提供(如果是用户声明且未明确默认)或 在其第一次声明时被删除。用户提供的显式默认值 函数(即在第一次声明后显式默认)是 在明确默认的位置定义;如果这样一个 函数被隐式定义为已删除,程序格式错误。[ 注意:在第一次声明后将函数声明为默认函数 可以提供高效的执行和简洁的定义,同时启用 与不断发展的代码库的稳定二进制接口。-尾注]

最后的注释是什么意思?据我所知,在第一次声明后将函数声明为默认函数将使该函数由用户提供,从而使该函数变得不平凡,从而使该类型具有不平凡的默认构造函数或使该类型变得不平凡-可复制,当然也使类型变得非平凡且非 POD,同时仍然具有提供函数实际定义的实现。但我不明白这如何导致“provide efficient execution and concise definition while enabling a stable binary interface to an evolving code base“。欢迎任何想法,高度赞赏现实世界的例子。谢谢。

此类类型的示例:

struct A {
    A();
};
A::A() = default;

假设你有

// A.h
struct A {
  A();
};

and

// A.cc
A::A() { }

你可以将其更改为

// A.cc
A::A() = default;

不强制代码使用A.h重新编译。

对于默认构造函数来说,这没有多大意义。= default占用的字符数多于{ }。但请考虑其他构造函数类型:如果不再需要显式提及每个字段,则复制或移动构造函数可能会变得更短,并且根据您正在处理的编译器和类型,默认的复制/移动构造函数甚至可能会执行更好,例如,如果编译器只能检测到memcpy当您使用时调用就足够了= default syntax.

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

在第一次声明后将函数声明为默认函数 的相关文章

  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • 如何在 Spring MVC 应用程序中测试 Aspect

    我有一个 Spring MVC 应用程序 我使用一个方面来捕获所有控制器方法中的异常 Component Aspect public class ControllerExceptionAspect private Logger logger
  • 嵌套函数是否存在等效的 override ?

    如果我有这个函数 我应该怎么做才能用我自己的自定义版本替换内部函数 def foo def bar I want to change this pass here starts a long list of functions I want
  • GCC 错误消息“Error: unsupported for `mov'”是什么意思?

    我只是想编译一些我从书中输入的简单示例代码 GCC 给了我上述错误 这是我的代码 cat n test cpp 1 define READ COMMAND 3 2 3 define MSG LENGTH 128 4 5 include
  • 是否可以读取管道任务上的 PR 标签?

    我的问题基本上是标题 我找不到这样的信息阅读这一页并搜索网络 我的场景如下 每当我创建要掌握的 PR 时 我都会添加一个包含一些信息的标签 例如此处看到的 lib 版本 然后 在构建过程中 我生成发行说明 并希望像我一样在任务中访问该 PR
  • 张量流图在什么阶段建立?

    优化器通常会在许多步骤中运行相同的计算图 直到收敛 张量流是否在开始时设置图并在每个步骤中重用它 如果我在训练期间更改批量大小会怎样 如果我对图表进行一些减值更改 例如更改损失函数 会怎样 如果我对图表进行一些重大更改会怎样 张量流是否预先
  • openURL 在共享扩展中不起作用

    尝试使用 self extensionContext openURL completionHandler 在 iOS 8 共享扩展中打开包含的应用程序永远不会打开该应用程序 并且始终以 success NO 调用完成处理程序 Here操作扩
  • 在机械化中提交表格

    我在提交表单提交结果时遇到问题 我可以提交表单 但无法在第一个页面之后的页面上提交表单 I have browser mechanize Browser browser set handle robots False browser ope
  • 一项操作的两个快捷键

    我需要两个快捷方式来执行一项操作 Ctrl 1 or ctrl s 有什么办法可以做到这一点吗 或者我必须创建该操作的副本 然后为此操作分配第二个快捷方式 为了在一个操作上安装多个快捷方式 您可以使用QAction setShortcuts
  • 升级您的 Android Google 移动广告 SDK 以确保广告持续投放

    我今天收到这条消息 AdMob 发布商您好 7 月初 我们向 AdMob 发出了通知 拥有在 SDK 版本 6 4 1 及更低版本上运行应用程序的发布商 告知他们有关弃用 SDK 版本以及需要升级的信息 2016 年 9 月 15 日 对于
  • Excel VBA 英镑和冒号的含义?

    我试图理解一个带有井号和冒号符号的 vba 函数 VBA函数 kn 1 pn 1 y 1 我知道井号用于在 Excel VBA 中将变量声明为双精度型 然而 从上面那行来看 它似乎没有任何意义 上面的函数有什么作用呢 冒号 是语句分隔符 它
  • 计算上次 SQL 查询插入的行数

    我有这个查询 INSERT INTO db1 outbox DestinationNumber TextDecoded SELECT User CellPhone SMSMessage as TextDecoded FROM db2 Use
  • python 中是否有可用的缩放互补误差函数?

    在matlab中有一个特殊功能我所知道的任何 Python 集合中都没有它 numpy scipy mpmath 也许还有其他地方可以找到这样的功能 UPD对于所有认为这个问题微不足道的人 请首先尝试计算参数 30 的这个函数 UPD2任意
  • 是否有任何工具可以将托管 C++ 转换为 C++/CLI? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我们有一个使用托管 C 语法编写的旧项目 我想向团队提出一种相当无痛的更新方法 我不介意一定程度的人机交互 我认为我的期望是现实的 我们仍然需要手工
  • 如何使用 WorksheetFunction.VLookup 处理 1004 错误?

    我有这个代码 Dim wsFunc As WorksheetFunction Set wsFunc Application WorksheetFunction Dim ws As Worksheet Set ws Sheets 2012 D
  • React + Redux 中的 Action 不会触发减速器

    我正在开发一个react redux应用程序 由于某种原因 我调用的操作没有到达reducer 我目前只有一个日志语句 我已附上我认为相关的代码 任何贡献将不胜感激 组件中函数内调用的操作 onSearchPressed console l
  • 在android中的对话框中设置多个文本框

    我正在创建一个对话框 它就像一个包含两个文本框和两个按钮的登录屏幕 我能够创建它 但我的问题是两个编辑文本框彼此重叠 第二个编辑文本框与第一个编辑文本框重叠 这可能是一个简单的问题 但由于我是 Android 新手 所以我一直坚持下去 请帮
  • Django,更新部分页面

    我正在尝试实现一个简单的代码测试服务器 客户将在网页上提交他们的代码 我们将使用两个测试用例运行它 可能需要几分钟 然后我们将发布结果 该页面将很简单 带有提交表单和输出框 我的问题是更新输出框 我正在寻找simplest实现输出框的方法
  • 使用 psutil 终止进程

    我正在编写一些代码 根据进程的名称和所有者来终止进程 这在 Windows XP 上运行良好 但当我在 Windows 7 上运行相同的代码时 在尝试获取进程的用户名时出现 访问被拒绝 错误 有没有更简单的方法来终止在 XP 和 Win7
  • 变分自动编码器:Keras 中的实现预热

    我最近读过这张纸它引入了一个称为 预热 WU 的过程 该过程包括将 KL 散度中的损失乘以一个变量 该变量的值取决于纪元数 从 0 到 1 线性演化 我想知道这是否是做到这一点的好方法 beta K variable value 0 0 d
  • 在第一次声明后将函数声明为默认函数

    In 8 4 2 Explicitly defaulted functions dcl fct def default 标准的 显式默认函数和隐式声明函数是 统称为默认函数 并且实现应 为它们提供隐式定义 12 1 12 4 12 8 这可