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

相关推荐
皓月斯语11 小时前
B2132 素数对
c++·算法·题解
星轨初途12 小时前
LeetCode 热题 100——day2 字母异位词分组
c++·算法·leetcode
笨鸟先飞的橘猫13 小时前
c++面向对象编程
开发语言·c++
啦啦啦啦啦zzzz13 小时前
设计模式:桥接模式和组合模式
c++·设计模式·组合模式·桥接模式
-森屿安年-13 小时前
647. 回文子串
c++·算法·动态规划
fpcc13 小时前
c++应用网络编程之十七WebSocket
网络·c++·websocket
haolin123.13 小时前
类和对象(下)
c语言·开发语言·c++
皓月斯语13 小时前
P5736 【深基7.例2】质数筛
c++·算法·题解
鸿芯微控科技14 小时前
MFC质量流量控制器流量不准怎么排查?设定值、反馈值与参考流量对比,附Python代码
c++·python·mfc
拂拉氏14 小时前
【知识讲解】 让指针拥有“自我意识”?--C++智能指针相关内容讲解
c++·智能指针