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的成员变量,因为静态成员变量是共享的肯定是会影响的

相关推荐
czxyvX2 小时前
1-Qt概述
c++·qt
齐鲁大虾2 小时前
新人编程语言选择指南
javascript·c++·python·c#
CoderMeijun2 小时前
C++ 多线程进阶:Lambda、条件变量与死锁
c++·多线程·条件变量·lambda·死锁·生产者消费者
unicrom_深圳市由你创科技3 小时前
上位机开发常用的语言 / 框架有哪些?
c++·python·c#
|_⊙3 小时前
C++ 智能指针
开发语言·c++
Jasmine_llq4 小时前
《B4356 [GESP202506 二级] 数三角形》
开发语言·c++·双重循环枚举算法·顺序输入输出算法·去重枚举算法·整除判断算法·计数统计算法
山栀shanzhi4 小时前
在做直播时,I帧的间隔(GOP)一般是多少?
网络·c++·面试·ffmpeg
王老师青少年编程4 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:魔法
c++·算法·贪心·csp·信奥赛·排序贪心·魔法
晓觉儿4 小时前
【GPLT】2026年第十一届团队程序设计天梯赛赛后题解(已写2h,存档中)
数据结构·c++·算法·深度优先·图论