gpt4 book ai didi

c++ - 默认情况下,局部变量和全局变量是如何初始化的?

转载 作者:可可西里 更新时间:2023-11-01 15:38:43 29 4
gpt4 key购买 nike

基于以下,我是对的吗?

  • global_A 引用被初始化为 null。
  • global_int 为 0
  • local_A 引用为空
  • local_int 未初始化
  • global_A.x 和 local_A.x 均未初始化。

感谢您的帮助。


A global_A;
int global_int;

class A {
public : int x;
}

int main()
{
int local_int;
A local_A;
}

最佳答案

以安德烈的回应为基础。

$3.6.2-“具有静态存储持续时间 (3.7.1) 的对象应在任何其他初始化发生之前进行零初始化 (8.5)。”。在 OP 中,“global_A”和“global_int”具有静态存储持续时间。 “local_int”和“local_A”没有链接,因为它们是本地对象。

$8.5/5- 零初始化类型 T 的对象意味着:

— if T is a scalar type (3.9), the object is set to the value of 0 (zero) converted to T;

— if T is a non-union class type, each nonstatic data member and each base-class subobject is zeroinitialized;

— if T is a union type, the object’s first named data member89) is zero-initialized;

— if T is an array type, each element is zero-initialized;

— if T is a reference type, no initialization is performed.

$6.7.4/4- "在任何其他初始化发生之前执行具有静态存储持续时间 (3.7.1) 的所有本地对象的零初始化 (8.5)。具有静态的 POD 类型 (3.9) 的本地对象用常量表达式初始化的存储持续时间在首次进入其 block 之前被初始化。允许执行的实现在允许实现在命名空间范围 (3.6.2) 中静态初始化具有静态存储持续时间的对象的相同条件下,早期初始化具有静态存储持续时间的其他本地对象。否则,这样的对象会在控件第一次通过其声明时被初始化;这样的对象在其初始化完成后被视为已初始化。如果初始化通过抛出异常退出,则初始化没有完成,所以下次控制进入声明时会再次尝试。如果在初始化对象时控件重新进入声明(递归),则行为未定义。”

编辑 2:

$8.5/9- "If no initializer is specified for an object, and the object is of (possibly cv-qualified) non-POD class type (or array thereof), the object shall be default-initialized; if the object is of const-qualified type, the underlying class type shall have a user-declared default constructor. Otherwise, if no initializer is specified for a nonstatic object, the object and its subobjects, if any, have an indeterminate initial value90); if the object or any of its subobjects are of const-qualified type, the program is ill-formed."

一般来说,您想要阅读这些部分以及 8.5 美元以获得这方面的良好把握。

关于c++ - 默认情况下,局部变量和全局变量是如何初始化的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3553559/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com