当前位置: 首页 > 知识库问答 >
问题:

值初始化是C 98标准的一部分吗?如果不是,为什么它被添加到C 03标准中?

窦伟
2023-03-14

干杯和hth。-Alf在回答中评论说,与C 98相比,值初始化可以说是C 03的一个新特性。我不知道他是什么意思。

值初始化是C 98的一部分吗?它存在于概念中而不是名称中?为什么它被添加到C 03标准中?

我有一份03标准的副本,但没有98标准。这是默认初始化和值初始化的定义。

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

-如果T是非POD类类型(第9条),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是病态的);

-如果T是数组类型,则每个元素都是默认初始化的;

-否则,对象初始化为零。

初始化T型对象的值意味着:

-如果T是具有用户声明构造函数(12.1)的类类型(第9条),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是病态的);

-如果T是没有用户声明构造函数的非并集类类型,则T的每个非静态数据成员和基类组件都是值初始化的;

-如果T是数组类型,则每个元素都是值初始化的;

-否则,对象初始化为零

我的猜测是1998年有默认初始化,但没有值初始化,这两者之间有一些关键区别。老实说,我在这里解析standardese时遇到了麻烦,我不理解定义之间的区别。

共有1个答案

姬俊远
2023-03-14

引用ISO/IEC 14882:1998标准文件(已从ISO中撤回):

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

  • 如果T是非POD类类型(第9条),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是病态的)
  • 如果T是数组类型,则每个元素默认初始化
  • 否则,对象的存储为零初始化

在第7段中:

初始化器为空括号集的对象,即(),应默认初始化。

更改背后的基本原理的详细信息可以在实现它的缺陷报告中找到:

此定义适用于局部变量,但不适用于由于执行形式为T()的表达式而初始化的对象,因为此类表达式生成的对象将立即复制,因此其值应确保可复制<为此,我提议在8.5第5段中增加以下新案文:

初始化类型为T的对象的值意味着:

  • 如果T是具有用户声明构造函数(12.1)的类类型(第9条[类]),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是病态的)
  • 如果T是一个没有用户声明构造函数的类类型,那么T的每个非静态数据成员和基类组件都是值初始化的
  • 如果T是数组类型,则每个元素都初始化为值
  • 否则,对象的存储为零初始化

此外,我建议将5.2.3第2段中的“默认初始化”更改为“值初始化”。

然后是一个历史性的解释:

古代历史

很久以前,一个AT

int x;

但我很快意识到那个定义不行。原因是x有一个不确定的值(假设它是一个局部变量),但我们不介意x是不确定的,因为我们大概是要在使用它之前给x赋值。相比之下,int()最好不要有一个不确定的值,因为复制这样的值具有未定义的效果。禁止编译器在编译期间标记int()是愚蠢的,只是为了让它在执行期间标记它![...]

 类似资料:
  • 本文向大家介绍什么是数据标准化,为什么要进行数据标准化?相关面试题,主要包含被问及什么是数据标准化,为什么要进行数据标准化?时的应答技巧和注意事项,需要的朋友参考一下 数据标准化是预处理步骤,将数据标准化到一个特定的范围能够在反向传播中保证更好的收敛。一般来说,是将该值将去平均值后再除以标准差。如果不进行数据标准化,有些特征(值很大)将会对损失函数影响更大(就算这个特别大的特征只是改变了1%,但是

  • 问题内容: 在ICU项目(也现在有一个PHP库)中包含有需要帮助恢复正常UTF-8串类,使搜索时更容易地比较值。 但是,我试图弄清楚这对应用程序意味着什么。例如,在哪种情况下,我想要“规范对等”而不是“兼容性对等”,反之亦然? 问题答案: 规范化归一化 Unicode包括多种编码某些字符(最著名的是重音字符)的方法。规范化规范将代码点更改为规范编码形式。生成的代码点应与原始代码点相同,除非字体或渲

  • 统计指标 释义 访问量(IP) 一天之内您网站的独立访问IP数 页面浏览量(PV) 即PageView值,用户每打开1个网站页面,记录1个PV 用户多次打开同一页面PV累计多次 独立访客数(UV) UV即UniqueVistor,独立访客数,指1天内访问某站点的人数,以cookie为依据 1天内同一访客的多次访问只计为1个访客;不同浏览器访问累计+1;一旦清除浏览器缓存,UV将会刷新 新访客(NE

  • 问题内容: 给定中的值,是否有标准的方法向其添加整数秒,例如? 这些明显的想法行不通: 最后,我编写了这样的函数: 我不禁以为我缺少一种更简单的方法来做到这一点。 问题答案: 你可以将完整变量与一起使用,并提供一个虚拟日期,然后使用time来获取时间值。 例如: 你也可以选择更具可读性的 如果你这么倾向。 如果你追求的是可以执行此操作的函数,则可以使用addSecs以下方法进行研究:

  • 我的问题是批处理规范化(BN)正在规范化什么。 我在问,BN是单独标准化每个像素的通道还是一起标准化所有像素的通道。它是在每张图像的基础上还是在整个批次的所有通道上进行的。 具体而言,BN在X上运行。比如说,。因此,当轴=3时,它在“c”维度上运行,即通道数(对于rgb)或特征图数。 因此,假设X是rgb,因此有3个通道。BN是否做到了以下几点:(这是BN的简化版本,用于讨论维度方面。我知道gam

  • 既然c 17有了< code>std::byte,我就在寻找一种方法,将读取文件到< code>char的代码转换成读取文件到< code>byte的代码。文件包含字节,而不是一堆整数。 然后我读了这个问题和另一个问题,人们认为把文件读入<code>字节</code>是错误的,把文件读进<code<char>是正确的。 如果< code>byte不是为了访问内存而设计的,那么它的目的是什么呢?正如