This question already has answers here:
Difference between initialization of static variables in C and C++
(3 个回答)
5 个月前关闭。
我有以下简单的程序:
但是,当用 g++ 编译时,我没有收到任何错误并且程序运行良好(打印
我的问题是:
我的假设正确吗? 如果是这样,为什么可以在 C++ 中对静态变量进行这样的初始化?
(3 个回答)
5 个月前关闭。
我有以下简单的程序:
int main()
{
int x = 5;
static int y = x;
return (0);
}
用 gcc 编译它,它会为 static int y = x;
行产生错误,因为“初始化元素不是常量”。我认为这是由于 y
是一个静态变量,在编译时需要知道其存储位置(data/bss)和初始值。但是,当用 g++ 编译时,我没有收到任何错误并且程序运行良好(打印
y
打印 5)。我的问题是:
最佳答案
您的程序在 C++ 中格式良好,因为具有静态存储持续时间的局部变量不是在启动期间初始化(常量表达式有一些异常(exception);在此示例中不适用),但在第一次控制通过它们的声明时,此时初始化程序包含本地非静态变量 x
的表达式很容易获得。
引用 cppreference / Storage duration - Static local variables [ 强调 我的]
然而,C 中的静态初始化不遵循相同的规则;来自 cppreference / C language - Initialization :
因此,您的程序在 C 中格式错误。
关于c++ - C++中静态变量的存储位置是什么时候确定的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/65716519/
10-17 00:33