gpt4 book ai didi

c++ - 全局对象中内置类型的成员变量是否初始化为零?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:42:33 27 4
gpt4 key购买 nike

使用具有自动存储持续时间的内置类型的未初始化对象是未定义的行为。当然,我强烈建议始终在类类型中初始化内置类型的成员变量。尽管如此,如果类类型的相应对象具有静态存储持续时间(即全局目的)。我的假设是,具有静态存储持续时间 的类类型对象的完整内存归零

例子:

#include <iostream>
using namespace std;

class Foo {
public:
int bar;
};

Foo a;

int main() {
Foo b;
cout << "a.bar " << a.bar << "\n";
cout << "b.bar " << b.bar << "\n";
return 0;
}

编译:

$ g++ -o init init.cpp -Wall -pedantic # gcc 7.2.1
init.cpp: In function ‘int main()’:
init.cpp:14:31: warning: ‘b.Foo::bar’ may be used uninitialized in this function [-Wmaybe-uninitialized]
cout << "b.bar " << b.bar << "\n";
^~~~

GCC 仅提示具有自动存储持续时间的类类型对象的成员 b.bar 而不是 a.bar。所以我是对的?

请随意修改此问题的标题。

谢谢

最佳答案

如评论中所述,它是零初始化[basic.start.init]/3 :

Variables with static storage duration ([basic.stc.static]) or thread storage duration ([basic.stc.thread]) shall be zero-initialized ([dcl.init]) before any other initialization takes place.[...]

零初始化一个对象,零初始化它的所有非静态数据成员和填充位,[dlc.init]/6.2 :

To zero-initialize an object or reference of type T means:[...]

  • if T is a (possibly cv-qualified) non-union class type, each non-static data member and each base-class subobject is zero-initialized and padding is initialized to zero bits;[...]

因此,正如您所说,完整的对象内存已清零(属于其值表示的位及其填充位)。

关于c++ - 全局对象中内置类型的成员变量是否初始化为零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930181/

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