gpt4 book ai didi

c++ - 在全局空间中的静态变量之前声明类的对象是否定义明确?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:58:18 24 4
gpt4 key购买 nike

下面是一个简单的对象计数案例:

struct A
{
static int count;
A () { ++ count; }
};

现在,它的对象和static成员声明为:

A obj;  // comes 1st
int A::count = 5; // comes 2nd

g++ produces expected result .但是,由于 A::count 的定义出现在全局空间中的 A 实例之一之后,它不应该是未定义的行为吗?

最佳答案

视情况而定。

3.6.2

The storage for objects with static storage duration (basic.stc.static) shall be zero-initialized (dcl.init) before any other initialization takes place. Zero-initialization and initialization with a constant expression are collectively called static initialization; all other initialization is dynamic initialization. Objects of POD types (basic.types) with static storage duration initialized with constant expressions (expr.const) shall be initialized before any dynamic initialization takes place.

因为你有一个用常量表达式初始化的 POD,它将被静态初始化,即在任何构造函数运行之前。更改这些条件中的任何一个,都可能会出现意想不到的结果。

关于c++ - 在全局空间中的静态变量之前声明类的对象是否定义明确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6516557/

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