Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态和动态初始化示例_C++_Initialization - Fatal编程技术网

C++ 静态和动态初始化示例

C++ 静态和动态初始化示例,c++,initialization,C++,Initialization,是否有一个实例,其中变量以静态和动态方式初始化。即,如规范所述 静态初始化应在任何动态初始化之前进行 初始化发生 我假设变量可以在同一个程序中以静态和动态的方式初始化。虽然,我认为,初始化是初始值的定义。也就是说,变量初始化一次,就不能再初始化了。当然:静态初始化是在任何用户代码运行之前进行的,它用零填充所有对象 这些零可能在执行其他初始值设定项时可见。阅读有关 请注意,在动态初始化完成之前,对象不会被认为是构造的,您必须遵循生存期规则[basic.life]标准中说: 对象的生存期是对象的运行

是否有一个实例,其中变量以静态和动态方式初始化。即,如规范所述

静态初始化应在任何动态初始化之前进行 初始化发生


我假设变量可以在同一个程序中以静态和动态的方式初始化。虽然,我认为,初始化是初始值的定义。也就是说,变量初始化一次,就不能再初始化了。

当然:静态初始化是在任何用户代码运行之前进行的,它用零填充所有对象

这些零可能在执行其他初始值设定项时可见。阅读有关

请注意,在动态初始化完成之前,对象不会被认为是构造的,您必须遵循生存期规则<代码>[basic.life]标准中说:

对象的生存期是对象的运行时属性。如果一个对象属于类或聚合类型,并且它或它的一个成员是由一个构造函数而不是一个普通的默认构造函数初始化的,则称该对象具有非普通的初始化。[注:普通复制/移动构造函数的初始化是非普通初始化。-结束注]类型为
T
的对象的生存期始于:

  • 获得类型
    T
    的正确对齐和尺寸的存储,以及
  • 如果对象具有非平凡的初始化,则其初始化已完成

本国际标准中规定的对象特性仅适用于给定对象的使用寿命。[注:特别是,在对象的生命周期开始之前和生命周期结束之后,如下文12.6.2和12.7中所述,对对象的使用有重大限制。。此外,正在构建和销毁的对象的行为可能与生命周期结束的对象的行为不同s开始和未结束。12.6.2和12.7描述了施工和破坏阶段中物体的行为。-结束注释]

类似地,在对象的生存期开始之前,但在分配对象将占用的存储之后,或者在对象的生存期结束之后,在重用或释放对象占用的存储之前,引用原始对象的任何glvalue都可以使用,但只能以有限的方式使用。对于正在建造或破坏的物体,见12.7。否则,此类glvalue指的是已分配的存储(3.7.4.2),使用不依赖于其值的glvalue属性是明确定义的。在以下情况下,程序具有未定义的行为:

  • 将左值到右值的转换(4.1)应用于该glvalue
  • glvalue用于访问非静态数据成员或调用对象的非静态成员函数,或
  • glvalue绑定到对虚拟基类(8.5.3)的引用,或
  • glvalue用作
    动态转换的操作数(5.2.7)或
    类型ID的操作数

因此,访问非原语类型的对象的(归零)内容很容易导致未定义的行为。

当然:静态初始化在任何用户代码运行之前进行,将所有对象填充为零

这些零可能在执行其他初始值设定项时可见。阅读有关

请注意,在动态初始化完成之前,对象不会被认为是构造的,您必须遵循生存期规则<代码>[basic.life]
标准中说:

对象的生存期是对象的运行时属性。如果一个对象属于类或聚合类型,并且它或它的一个成员是由一个构造函数而不是一个普通的默认构造函数初始化的,则称该对象具有非普通的初始化。[注:普通复制/移动构造函数的初始化是非普通初始化。-结束注]类型为
T
的对象的生存期始于:

  • 获得类型
    T
    的正确对齐和尺寸的存储,以及
  • 如果对象具有非平凡的初始化,则其初始化已完成

本国际标准中规定的对象特性仅适用于给定对象的使用寿命。[注:特别是,在对象的生命周期开始之前和生命周期结束之后,如下文12.6.2和12.7中所述,对对象的使用有重大限制。。此外,正在构建和销毁的对象的行为可能与生命周期结束的对象的行为不同s开始和未结束。12.6.2和12.7描述了施工和破坏阶段中物体的行为。-结束注释]

类似地,在对象的生存期开始之前,但在分配对象将占用的存储之后,或者在对象的生存期结束之后,在重用或释放对象占用的存储之前,引用原始对象的任何glvalue都可以使用,但只能以有限的方式使用。对于正在建造或破坏的物体,见12.7。否则,此类glvalue指的是已分配的存储(3.7.4.2),使用不依赖于其值的glvalue属性是明确定义的。在以下情况下,程序具有未定义的行为:

  • 将左值到右值的转换(4.1)应用于该glvalue
  • glvalue用于访问非静态数据成员或调用对象的非静态成员函数,或
  • glvalue绑定到对虚拟基类(8.5.3)的引用,或
  • glvalue用作
    动态转换的操作数(5.2.7)