This question already has answers here:
Difference between initialization of static variables in C and 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++ 中对静态变量进行这样的初始化?
  • 最佳答案

    您的程序在 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