编程语言
430
1 分钟
枚举基本上就是一个数值集合,它们是给一个值命名的一种方法,它还可以帮助我们将一组数值集合作为类型,而不仅仅用整数作为类型。
编程语言
971
2 分钟
局部静态变量和全局静态变量在生存周期上是一样的,都是全局只存在一份。它们只在作用域上有所不同。不过我们在了解局部静态变量前,先看一个之前困扰我的问题。
困扰我的问题
下面是一个简单的单例模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Singleton
{
private:
static Singleton* s_Instance; // 不能在这里直接初始化(如 static Singleton* s_Instance = nullptr;)。
// 静态成员变量的定义(即分配内存空间)需要在类的外部进行,即使它在类内部被声明为private。
public:
static Singleton& Get() { return *s_Instance; }
void Hello()
{
std::cout << "Hello" << std::endl;
}
};
// 在C++中,类的静态成员变量不能在类定义内部直接初始化(如 static Singleton* s_Instance = nullptr;)。
// 这是因为类的静态成员变量是属于类本身的,而不是属于类的任何特定对象,它们的存储和初始化需要在类的外部进行。
Singleton* Singleton::s_Instance = nullptr;
int main()
{
Singleton::Get().Hello(); // 调用没报错
}
|
我们在外部初始化s_Instance为nullptr,为什么Singleton::Get().Hello();调用没有报错?还能正常执行?不是应该空指针异常吗?
编程语言
375
1 分钟
类和结构体中的static变量和文件中的static是一个道理,只不过是在类中私有的,外部无法找到,因此需要在外部定义这个变量,就和你extern是一个道理,只不过这个类是在你当前文件中的,因此不需要extern关键字。
编程语言
352
1 分钟
static 修饰的全局变量具有文件作用域,仅在定义它的源文件内可见,变量的生命周期为整个程序运行期,在 main 函数执行前初始化,程序结束时销毁。
编程语言
778
2 分钟
在C++中,类(Class)是一种用户定义的数据类型,用于封装数据和对数据的操作。类是面向对象编程(OOP)的核心概念之一,允许你将数据和操作数据的方法组合在一起。
定义一个简单的类
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Player
{
public:
int x, y; // 成员变量
int speed; // 成员变量
// 成员方法
void Move(int xa, int ya)
{
x += xa * speed;
y += ya * speed;
}
};
|