gpt4 book ai didi

c++ - 为什么 "static"既是存储类又是链接说明符?

转载 作者:行者123 更新时间:2023-11-30 04:04:23 25 4
gpt4 key购买 nike

static 关键字定义变量如何存储在内存中,即如果已初始化则存储在数据段中,如果未初始化则存储在 BSS 中。但是该关键字还指定了如何链接变量,即仅限于局部范围。

这两件事有什么关系或为什么有关系?两者可以分开吗,或者这是一个必要的设计考虑?

IOW,为什么如果我希望我的变量在程序运行期间存在,它必须在内部链接?

最佳答案

关键字 static 可能会被视为有些“重载”。

以下使用选项都是可行的:

  • 静态局部变量
  • 静态全局变量
  • 静态成员变量
  • 静态全局函数
  • 静态成员函数

变量:

在运行时方面,所有类型的静态变量在本质上都是一样的。它们都驻留在程序的data-section中,并且它们的地址在整个程序执行过程中保持不变。所以它们之间的唯一区别是在编译期间,在声明范围内:

  • 静态局部变量:编译器只在函数范围内识别
  • 静态全局变量:编译器只在文件范围内识别
  • 静态成员变量:只在类的范围内被编译器识别

函数:

在运行时方面,所有类型的函数(静态和非静态)本质上是相同的。它们都驻留在程序的代码段中,并且它们的地址在整个程序执行过程中保持不变。所以它们之间的唯一区别是在编译期间,在声明范围内:

  • 静态全局函数:编译器只在文件范围内识别
  • 静态成员函数:只在类的范围内被编译器识别

关于c++ - 为什么 "static"既是存储类又是链接说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23763169/

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