静态数据成员

静态数据成员不关联到任何对象。即使不定义类的任何对象它们也存在。整个程序中只有一个拥有静态存储期的静态数据成员实例,除非使用关键词 thread_local,此时每个线程都有一个具有线程存储期的该对象 (C++11 起)。

静态数据成员不能是 mutable 的。

在命名空间作用域中,如果类自身具有外部连接(即不是无名命名空间的成员),那么类的静态数据成员也具有外部连接。局部类(定义于函数内部的类)和无名类,包括无名类的成员类,不能拥有静态数据成员。

 静态数据成员可以声明为 inline。 inline 静态数据成员可以在类定义中定义,而且可以指定初始化器。它不需要类外定义

#include<iostream>
struct Test {
	static inline int v = 0;
};
int main() {
	Test c;
	std::cout << c.v << std::endl;
	Test::v = 100;
	std::cout << c.v << std::endl;
	
	Test d;
	std::cout << d.v << std::endl;
	d.v = 2;
	std::cout << Test::v << std::endl;
	//和普通的static变量一样,它是所有对象共享
}

文档: 静态成员 - cppreference.comhttps://zh.cppreference.com/w/cpp/language/static

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐