对于非非空初始化,生命周期在初始化之前开始,它解决了什么问题?

2023-12-20

当前的标准草案说(以前的标准有类似的措辞)[基本生活/1] http://www.eel.is/c++draft/basic.life#1:

对象或引用的生命周期是该对象或引用的运行时属性。据说一个物体有非空的如果它是类或聚合类型,并且它或其子对象之一是由普通默认构造函数以外的构造函数初始化的,则初始化。 [ 注意:通过简单的复制/移动构造函数进行初始化是非空的初始化。 —《尾注》] T 类型对象的生命周期从以下时刻开始:

(1.1) 获得类型 T 具有适当对齐和大小的存储,并且

(1.2) 如果物体有非空的初始化,其初始化完成

为什么初始化在这里很重要非空的?换句话说,如果初始化没有完成,为什么生命周期在初始化完成之前就开始了?非空的?它解决什么问题?

如果将(1.2)理解为,会产生什么后果

(1.2) 如果对象有初始化,则其初始化完成

期限非空的只用在这里,肯定有什么原因。


注意,我之前也有过类似的问题here https://stackoverflow.com/questions/52154744/lifetime-of-object-which-has-vacuous-initialization,但由于这个问题有点太宽泛(甚至我接受了其中一个答案),那里的回答并没有回答这个当前的问题。


我认为它是为了解决不执行初始化的默认初始化:

[dlc.init]:

默认初始化 T 类型的对象意味着:

(7.1) — 如果 T 是一个(可能是 cv 限定的)类类型(第 12 条),则考虑构造函数。枚举了适用的构造函数(16.3.1.3),并通过重载决议(16.3)选择最适合初始化器()的构造函数。使用空参数列表调用如此选择的构造函数来初始化对象。

(7.2) — 如果 T 是数组类型,则每个元素都默认初始化。

(7.3) — 否则,不执行初始化。

我知道所有对象都有初始化,但对于某些具有默认初始化的对象,不执行初始化。请注意,它特别指出“未执行初始化”,并不是说它不存在。

您可以拥有一个默认初始化的对象,但未执行任何初始化,因此它无法完成。他们不会开始他们的一生,按照目前的措辞,他们不必等待这种“不初始化”的发生来开始他们的生活。此外,此类对象必须进行初始化,因为它是默认初始化的。

恕我直言,您的措辞会有缺陷,或者您的理解会导致默认初始化定义 7.3 的逻辑后果,因为此类对象将:

  1. 已经初始化并且不会开始生存,因为它没有执行。
  2. 默认初始化,但不会进行初始化。我知道这可能会令人困惑。

从目前的措辞来看,已经很清楚了。也许某个地方可以明确说明哪些对象具有初始化或者初始化意味着什么。我想都可以,但我手下没有它的草图。

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

对于非非空初始化,生命周期在初始化之前开始,它解决了什么问题? 的相关文章

  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 使用 C# 和 ASP.NET 在电子邮件附件中发送 SQL 报告

    我正在尝试使用 ASP NET 和 C 从 sql reportserver 2008 作为电子邮件附件发送报告 到目前为止我学会了如何获取 PDF 格式的报告 http weblogs asp net srkirkland archive
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 如何向 Mono.ZeroConf 注册服务?

    我正在尝试测试 ZeroConf 示例http www mono project com Mono Zeroconf http www mono project com Mono Zeroconf 我正在运行 OpenSuse 11 和 M
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 保证复制省略是否适用于函数参数?

    如果我理解正确的话 从 C 17 开始 这段代码现在要求不进行任何复制 Foo myfunc void return Foo auto foo myfunc no copy 函数参数也是如此吗 下面的代码中的副本会被优化掉吗 Foo myf
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • C:设置变量范围内所有位的最有效方法

    让我们来int举个例子 int SetBitWithinRange const unsigned from const unsigned to To be implemented SetBitWithinRange应该返回一个int其中所有
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐

  • __unsafe_unretained 和弱并在 ARC 下分配? [复制]

    这个问题在这里已经有答案了 可能的重复 强 弱 保留 unsafe unretained 分配 https stackoverflow com questions 9784762 strong weak retain unsafe unre
  • 如何在WPF选项卡控件中创建梯形选项卡

    如何在WPF选项卡控件中创建梯形选项卡 我想创建非矩形选项卡 看起来像 Google Chrome 中的选项卡或 VS 2008 代码编辑器中的选项卡 可以用 WPF 样式完成还是必须用代码绘制 互联网上有可用的代码示例吗 Edit The
  • 为什么当参数相等时 std::sort 比较函数必须返回 false?

    在 std sort 中 您可以提供第三个参数 它是列表排序方式的基础 如果您希望第一个参数先出现 则返回 true 如果您希望第二个参数先出现 则返回 false 我遇到了这样的问题 我的谓词函数应该是 无效的比较器 我已将其范围缩小到它
  • @mui/material/styles 和 @mui/styles 之间的区别?

    在 Material UI v5 中 一些 API 使用是从 mui material styles like useTheme 一些API的使用是从导入的 mui styles like makeStyles 我可以只使用一个库中的那些与
  • 将通用结构保存到 redis

    在编写 golang Web 服务器时 我必须使用某种缓存 所以我选择了 redis 我需要某种可以接受任何结构并将其作为值保存到 Redis 的函数 有什么方法可以在不使用的情况下做到这一点interface 作为接收参数或重复太多但仍保
  • 包含至少一位数字的字母数字字符串的正则表达式

    我正在寻找具有以下条件的正则表达式 a 至少 13 个字母数字字符 b 最多 17 个字母数字 人物 c 和至少 1 位数字 该正则表达式满足 a 和 b 它如何也满足条件c a zA Z0 9 13 17 输入文本示例 matching
  • 简单GDI项目的Mingw-w64和TDM-GCC之间的差异

    我需要在 Win64 上为 Win64 构建一个简单的非商业工具 处理 Windows GDI API 无交叉编译 MinGW 对我来说似乎是最好的选择 我过去已经使用过 32 位版本 至于 64 位 你能告诉我以下版本之间的主要区别吗 明
  • CSS:如何仅在支持悬停的设备上允许悬停状态?

    我一直在寻找一种方法来防止触摸设备 模拟 悬停事件 原因是您无法像在桌面上那样使用光标悬停在触摸设备上 这有时会影响用户体验 因为我在网上没有找到任何解决方案 所以我想在这里发布我自己的解决方案 我希望这会对某人有所帮助 我实现了仅将鼠标悬
  • cURL 从 FTPS 站点下载多个文件

    我正在使用 cURL 第一次使用它 从命令行从 ftps 站点下载文件 这就是我需要做的 从 ftps 站点下载与特定文件名匹配的多个文件 例如Filename csv 1998 zip所以我需要下载所有具有名称的文件Filename cs
  • Xcode 单元测试:Xcode 不会在断点处停止

    使用 Xcode 6 3 Beta 2 进行单元测试我遇到以下问题 当我进行单元测试时 单元测试模块中的断点可以工作 但被测试代码中的中断代码不会被忽略 有任何想法吗 我遇到了同样的问题 原因是方案设置 1 编辑您的方案 2 在左侧面板中选
  • 仅在node_modules中跳过库检查

    关于禁用错误输入中的错误有几个问题node modules e g this one https stackoverflow com questions 49906424 rxjs5 typescript typings fail 4991
  • jQuery UI 抖动 - 填充消失

    我遇到了这个小问题 我的包装纸里有一个盒子 我想来回摇晃它 效果很好 但是当我添加填充时 box动画打开时 填充会消失 这 box还有一个box sizing border box所以填充不会影响盒子的大小 如果我删除box sizing
  • 重定向而不更改 URL Apache

    我想将一个 URL 重定向到另一个 URL 而不更改浏览器 URL www example com abc xml 应重定向到 www example com abc xyz index htm file 1 但浏览器应该显示 www ex
  • 暂停代码执行但让 Excel 工作

    我正在制作一个宏 我想做以下事情 打开一个文件 等待文件填满数据 该文件使用单元格公式从外部数据库下载数据 下载大约需要15秒 20 秒后检查是否所有内容都已下载 如果没有 请再等待 10 秒 总共等待最多一分钟 如果所有内容都已下载 请存
  • Android ViewPager setCurrentItem 在 onResume 后不起作用

    我遇到了这个奇怪的问题ViewPager s setCurrentItem position false 工作得很好 然后我切换到另一个活动 在我回到第一个活动后 ViewPager总是以第一个项目结束 尽管我已经添加了setCurrent
  • 如何在 MySql 数据库中存储布尔值数组?

    就我而言 每个 项目 要么有属性 要么没有 这些属性可能有数百个 因此我需要每个项目最多 1000 个真 假位 有没有一种方法可以将这些位存储在项目的一个字段中 如果您正在寻找一种可搜索的方式来执行此操作 那么不行 几种可搜索的方法 涉及超
  • 将 Gatsby JS 站点部署到 Netlify 时,“运行命令时出错:构建脚本返回非零退出代码”

    我最近遇到了 Gatsby JS https github com gatsbyjs gatsby https github com gatsbyjs gatsby 并决定在生成器之上构建我的投资组合网站 所以我分叉了他们的入门网站 gat
  • 打印或死亡:如何检查 GPFS 网络安装的文件是否可用

    我有一个 Perl 脚本 用于写入位于 GPFS 网络安装存储点上的文件 有一个标准检查open FILE or die 文件系统宕机了 但是脚本并没有退出 它一直在努力写作 文件系统恢复后 Perl 脚本完成 如何检查文件系统是否可以写入
  • 来自 istream 的子流

    假设我有一个ifstream它代表一个包含许多聚合在一起的子文件的大文件 我希望能够创建一个 子 istream从较大的ifstream 给定大小和偏移量 表示文件的一部分 以便其他代码可以从该子流中读取 就好像它是一个独立的一样istre
  • 对于非非空初始化,生命周期在初始化之前开始,它解决了什么问题?

    当前的标准草案说 以前的标准有类似的措辞 基本生活 1 http www eel is c draft basic life 1 对象或引用的生命周期是该对象或引用的运行时属性 据说一个物体有非空的如果它是类或聚合类型 并且它或其子对象之一