c++复习——const,static字

对于const,其实我们只需要知道const修饰的东西不可以修改就行了,至于int const *p,int *const p

这两个有什么区别,其实很好理解的,int const *p就是常量指针,const在前是常量,像int *const p这个*在前就是指针常量,意思是指针指向的常量,那么指针指向的内容是不可以修改的,但是指针可以修改,第一个常量指针,就是指针这个是个常量,指向的地址是不可以修改的,但是指向的地址的那个内容,比如可能指向a,a的值是可以修改的

其实我们在函数里面也用了const这个关键字了的,在函数的右侧加上const就是一个常函数,我们都知道常函数不能调用非常函数,也不能改变成员变量,其实是这个函数的this指针有const修饰了,比如A类的成员函数,这个函数其实默认有参数的,就是A*this,因为只有这样才能确定我调用的是哪个类的成员函数,但是如果被const修饰了就是常量指针,这个指针是指向的常量,常量不能修改,所以说常函数正常情况下就是不能修改成员函数的,这里说一嘴,就是正常成员函数是A*const this的是指针常量,就是指针类型的常量,指针指向的内容不能更改,这样符合规范,如果成员函数修改了我写了A类的成员函数最后被B类的调用(没有继承关系),那不是乱套了

static关键字,这个东西蛮有用的,比如说,我在一个.cpp文件中全局变量定义了a,另一个文件中也定义了一个a,在这个项目里面,两个a会冲突,那怎么办,我就用static关键字就能做到不冲突,这是修饰全局变量的

static修饰局部变量时,只会被初始化一次,比如在一次循环中我定义static int a=1;a++;此时我们打印a会发现a就声明了一次1,后面不断被++,而不是一直输出2

成员变量被static修饰,首先是内存分布,会占用静态区内存不会占用对象内存,然后就是类内声明,类外初始化,在继承时,父类和子类享有同一个静态成员变量,如果此时父类和子类都有一个同名的成员变量,那么就会分别享有互不干扰,你的时你的变量我的是我的变量

我们可以用static来写单例模式,单例模式就是我访问就这一个,没有多余的对象访问,我们可以用单例模式来访问我们想要访问的成员变量

cpp 复制代码
#ifndef _MANAGER_H_
#define _MANAGER_H_
template<typename T>
class Manager
{
public:
	static T* instance()
	{
		if (!manager)
			manager = new T;
		return manager;

	}

protected:
	Manager() = default;
	~Manager() = default;
	Manager(const Manager&) = delete;
	Manager& operator=(const Manager&) = delete;
private:
	static T* manager;
};
template<typename T>
T* Manager<T>::manager = nullptr;
#endif // !_MANAGER_H_

这是一段关于单例模式的模板代码,我们不难发现,创造的实例是static,就只有一个这样我们可以避免多个单例的创建

这里还有一个static的用法就是在成员函数加上static,加上了成员函数就不能访问非静态成员变量,因为static后这个成员函数是属于整个类的,我创建了一个A a,A b,此时我们调用a的静态成员函数,因为static没有this指针,不知道是修改a的成员变量还是b的成员变量,会报错,所以就有static的成员函数无法访问非静态的成员变量,但是静态成员变量是共享的,所以不用担心修改a的成员变量会不会影响b的成员变量,因为静态成员变量是共享的肯定是会影响的

相关推荐
j7~4 分钟前
【C++】《C++STL 笔记:搞懂序列 / 关联容器,聊聊 set 和 map》
c++·set·map·multimap·multiset·键值对pair·序列是容器和关联式容器
郝学胜-神的一滴1 小时前
《C++11 工程级应用01:告别冗长类型,开启简洁高效编码新时代》深度解读
开发语言·c++·算法·软件开发·系统设计
码匠许师傅11 小时前
【C++ 面试真题】30. 聊聊 C++ 的互斥锁与读写锁
java·c++·面试
ShineWinsu12 小时前
对于 C++:C++14中从变量模板、泛型 Lambda 到并发与字面量的解析
c++·算法
一木 之林14 小时前
四、STL容器与数据结构
开发语言·数据结构·c++
程与留14 小时前
07_QMainWindow 与应用程序框架——菜单栏、工具栏、状态栏
c++·qt
_Narcissus_15 小时前
二分算法笔记及例题
数据结构·c++·笔记·算法·蓝桥杯·查找·二分算法
青少儿编程课堂18 小时前
用图形化编程做一个“少年探险闯关”小游戏:方向键控制、碰撞检测与多关卡串起完整项目
c++·python·算法·bfs·信息学竞赛
liulilittle18 小时前
长上下文的成本结构与「甜点区间」——从推理引擎的物理约束看 200K/256K/400K
c++·人工智能·ai·llm·注意力·qkv
十五年专注C++开发18 小时前
100w条数据丝滑滚动!Qt Model/View 架构实战(二)
开发语言·c++·qt