gpt4 book ai didi

C++静态POD初始化

转载 作者:行者123 更新时间:2023-11-30 01:30:31 27 4
gpt4 key购买 nike

我有一个简单 POD 的单个实例

a.hpp

class A {
struct Zzz {
A* m_aPtr;
int m_val;
}

static Zzz s_zzz;
};

a.cpp

A::Zzz A::s_zzz;

我希望 s_zzz.m_aPtr 和 s_zzz.m_val 在任何其他编译单元中的任何其他静态初始化之前都将被初始化为零,并且这是由语言本身保证的。我的说法对吗?

通常我为结构提供默认构造函数。说

A::Zzz::Zzz() :
m_aPtr(0),
m_val(0)
{
}

它会产生初始化顺序问题或引入编译器依赖项吗?

最佳答案

至少在 C++0x 中,您可以依赖在任何其他初始化代码运行之前执行的所有零初始化

来自 C++0x FCD,[basic.start.init] 部分

Variables with static storage duration (3.7.1) or thread storage duration (3.7.2) shall be zero-initialized (8.5) before any other initialization takes place.

如果您正在考虑使用其他初始化代码中的此变量,那么显式构造函数将是一个很大的错误,因为它有时会与其他初始化代码混合运行,并覆盖其他初始化程序已经做出的任何更改。

关于C++静态POD初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4377483/

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