类中静态变量的地址
Address of static variable in class
如果我有一个带有静态变量的类:
class A {
public:
...
private:
static int var;
}
class A
的多个实例是否会对静态变量var
使用相同的地址? 如果不是,将变量定义为指针是否会导致相同的地址?即:
class A {
public:
...
private:
static int* var;
}
类的所有实例将使用相同的副本,从而使用静态变量的地址。如果是否将其声明为指针并不重要。
无论如何,
类 A 的所有实例都将共享相同的var
实例。如果我们看一下C++标准部分的草案9.4.2
静态数据成员第 1 段说(强调我的):
静态数据成员不是类的子对象的一部分。如果将静态数据成员声明thread_local则每个线程都有一个成员副本。如果未声明静态数据成员thread_local则存在该类的所有对象共享的数据成员的一个副本。
此外,第2款说:
[...][ 注意:定义静态数据成员后,即使没有创建其类的对象,它仍然存在。[...]
所有实例都将看到静态变量的相同地址,因为该变量只有一个实例(这是static
变量的全部意义)。显然,如果只有一个实例,它只能存在于一个地方。无论是int
还是指针,对于指针,您只有一个可以使用的指针实例。
相关文章:
- 将数组的地址分配给变量并删除
- 将地址分配给本地指针后,公共对象的变量将消失
- 通过按地址访问变量
- 为什么未命名的结构内联变量在每个翻译单元中没有相同的地址?
- 为什么我可以将变量存储在不是其最小对齐方式的倍数的地址?
- 为什么同一个变量的内存地址不同?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 不同块作用域中的 C++ 变量具有相同的地址
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- C++在变量的内存地址上做什么来"deallocate"它?
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- 如何找到在本地范围内声明的变量的地址?
- 附加调试器并以编程方式获取变量地址 Visual Studio
- 初学者问题:C++指针/地址 - 和变量之后不是以前?
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?
- 为什么变量的打印地址在每次执行时都会打印随机值,即使它是 C 中的逻辑地址?
- 变量地址的运算符[]是如何工作的
- 使用基地址和偏移量获取变量的地址
- 两个不同的进程,在同一地址上有 2 个 std::atomic 变量?
- libmysql:警告:返回局部变量"行"的地址(C++/C)