首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未初始化的引用是零初始化的还是未初始化的标量?

未初始化的引用是零初始化的还是未初始化的标量?
EN

Stack Overflow用户
提问于 2021-09-16 09:57:12
回答 3查看 187关注 0票数 2

下列陈述正确吗?

  • 未初始化的引用被视为零初始化.
  • 未初始化的标量被视为默认初始化。
  • 任何其他未初始化的实体都不被视为零初始化或默认初始化。

它们基于[dcl.init.general/6] (粗体强调地雷):

要将对象或T类型的引用初始化为零,意味着:

  • 如果T是标量类型,则将对象初始化为通过将整数字面0 (0)转换为T获得的值;
  • 如果T是(可能是cv限定的)非并类类型,则其填充位被初始化为零位和每个非静态数据成员,每个非虚拟基类子对象,如果对象不是基类子对象,则每个虚拟基类子对象都为零初始化;
  • 如果T是(可能是cv限定的)联合类型,则其填充位被初始化为零位,并且对象的第一个非静态命名数据成员为零初始化;
  • 如果T是数组类型,则每个元素都为零初始化;
  • 如果T是引用类型,则不执行初始化

[dcl.init.general/7] (粗体强调地雷)上:

默认情况下-初始化T类型的对象意味着:

  • 如果T是(可能是cv限定的)类类型(类),则考虑构造函数。列举了适用的构造函数(over.match.ctor),并通过过载解析(over.match)选择了初始化器()的最佳构造函数。使用空参数列表调用所选择的构造函数来初始化对象。
  • 如果T是数组类型,则每个元素都是默认初始化的。
  • 否则,不执行初始化
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-09-16 10:14:55

下列陈述正确吗?

不,你在翻转他们头上的逻辑连接。

“零初始化”和“默认初始化”的定义指定了如果标准中的其他内容表示“对象为零初始化”,则它意味着什么。当标准这么说的时候,你可以用零初始化的定义来了解它的含义。作为参考,它意味着不进行初始化。因此,零初始化引用未初始化(因此格式不正确)。

不过,这并不意味着情况会相反。未初始化的引用不是零初始化的。这是一个谬论:顺向

当标准规定执行零初始化时,引用被初始化为零。

票数 8
EN

Stack Overflow用户

发布于 2021-09-16 10:08:21

(同一问题中的几个问题:我将回答一个问题)

下面的陈述正确吗?

  • 未初始化的引用被视为零初始化.

不是的。不存在未初始化的引用,因为它需要引用变量或对象,而不是(引用类型)参数或(引用类型)返回类型,其中不应用上下文初始化;根据[dcl.init.ref]/1/3

/1声明类型为“引用T”(dcl.ref) 的变量将被初始化。 /3 --仅在参数声明(dcl.fct)、函数返回类型的声明、类定义(class.mem)中的类成员声明以及显式使用extern说明符的情况下,才能省略作为引用的初始化器。

关于引用的[dcl.init.general]/6

要将对象或T类型的引用初始化为零,意味着:

  • ..。
  • ..。如果T是引用类型,则不执行初始化。

它指的是该标准的其他部分适用于零初始化的情况(以及它对不同实体的影响);对于引用的初始化,特别是考虑静态初始化,按照[basic.start.static]/2的要求进行。

..。如果不执行常量初始化,则具有静态存储持续时间 (basic.stc.static)或线程存储持续时间(basic.stc.thread) 的变量为零初始化 (dcl.init)。零初始化和常量初始化共同称为静态初始化,所有其他初始化都是动态初始化,所有静态初始化在任何动态初始化(intro.races)之前都会强烈发生。

这样,引用类型变量的静态初始化(不是常量初始化)将完全属于动态初始化,因为静态初始化的第一步零初始化的效果不是初始化。

票数 4
EN

Stack Overflow用户

发布于 2021-09-16 10:14:46

未初始化的引用被视为零初始化.

如果未初始化的引用是零初始化的,则可能是这样。也就是说,未初始化的引用已经被零初始化和未初始化的引用还没有零初始化之间没有明显的区别。

未初始化的标量被视为默认初始化。

如果未初始化的标量是默认的-初始化的话,情况可能是这样。尽管如此,一个未初始化的标量已经默认初始化,而一个未初始化的标量尚未默认初始化,两者之间没有明显的区别。

任何其他未初始化的实体都不被视为零初始化或默认初始化。

实体在被零初始化之后被认为是零初始化,在默认初始化之后被认为是默认初始化。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69206296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档