关于初始化非局部对象[英] About initializing non-local object

问题描述

你好.当我查阅 ISO C++ 标准时,我注意到在
标准第 3.6.2.1 段规定:
"具有静态存储时长的对象,在之前应进行零初始化
任何其他初始化都会发生."

这是否意味着所有非本地对象都将在之前进行零初始化
它们是由它们的初始化程序初始化的(如果有的话)?例如:

int g_var = 3;
int main() {}

g_var 会先初始化为零,再初始化为 3?

推荐答案

5月14日晚上8点20分,WaterWalk <toolmas...@163.com 写道:
你好.当我查阅 ISO C++ *标准时,我注意到在
标准第 3.6.2.1 段规定:
"具有静态存储时长的对象,在之前应进行零初始化
任何其他初始化都会发生."

这是否意味着所有非本地对象都将在之前进行零初始化
它们是由它们的初始化程序初始化的(如果有的话)?例如:

int g_var = 3;
int main() {}

g_var 会先初始化为零,然后初始化为 3?
是的.或者更准确地说,如果一个程序要观察 g_var 的值
那就是g_var的值的初始化序列——那
程序会看到.

格雷格


WaterWalk 写道:
你好.当我查阅 ISO C++ 标准时,我注意到在
标准第 3.6.2.1 段规定:
"具有静态存储时长的对象,在之前应进行零初始化
发生任何其他初始化."
那是草稿吗?我说:

"静态存储时长的对象的存储应为
在任何其他初始化发生之前进行零初始化."

这听起来更合乎逻辑,因为在 C++ 中,根据定义,对象可以是
仅初始化一次.
这是否意味着所有非本地对象都将在之前进行零初始化
它们是由它们的初始化程序初始化的(如果有的话)?
我想它确实 - 或多或少.见下文.
例如:

int g_var = 3;
int main() {}

g_var 会先初始化为零,然后初始化为 3?
好吧,你不会注意到任何区别,因为它将被初始化为 3
在您第一次访问它之前.在这种情况下,"好像"
可以使用规则,这表示程序不需要完全按照
标准说.它只需要具有与 a
相同的可观察效果程序会.由于没有符合标准的观察方式
对象的存储在对象的真实之前初始化为零
初始化,编译器可以不这样做.
这与动态初始化的对象更相关(即
带有构造函数的类).


5 月 15 日下午 12:19,Rolf Magnus <ramag...@t-online.dewrote:
水路写道:
你好.当我查阅 ISO C++ 标准时,我注意到在
标准第 3.6.2.1 段规定:
"具有静态存储时长的对象,在之前应进行零初始化
发生任何其他初始化."

那是草稿吗?我说:

"静态存储时长的对象的存储应为
在任何其他初始化发生之前进行零初始化."

这听起来更合乎逻辑,因为在 C++ 中,根据定义,对象可以是
只初始化一次
我的是2003版.也许你的是 1998 年的版本.

本文地址:https://www.itbaoku.cn/post/1050836.html