C++ const使用

const表示可读,但不能修改

修饰的内容不同,自然有不同的作用

1.const 修饰变量

a. const 修饰局部变量
cpp 复制代码
	const int a;	// 编译错误,未初始化
	const int a = 1;

	int& a = 10;	// 编译错误,非常量引用的初始值必须为左值
	const int& a = 10;
b. const 修饰指针变量(顶层const)

指针的指向不可变,指针指向的值可变

cpp 复制代码
	int* const a;	// 编译错误,未初始化
	int b = 3;
    int* const a = &b;
    int c = 4;
    a = &c;			// 编译错误,表达式必须是可修改的左值
c. const 修饰指向指针的变量(底层const)

指针指向的值 不可变,指针的指向可变

// todo

// 引用

const指针和指向const变量的指针,在写法上容易使人混淆。给大家介绍一种我自己用着比较顺手的区分方法:从右向左,依次结合,const就近结合。

比如,int * const p 可以这样进行解读:

1、int * ( const p ):变量p 经过 const 修饰,为只读变量。

2、int (* (const p)):(const p 现在作为一个整体) 只读变量p是一个指针。

3、(int (* (const p))):(同样的 * const p 作为一个整体) 这个只读的指针p,指向一个int型变量。

2. const 修饰函数

a. const 修饰函数参数

函数内部不能修改值

修饰形参指针也同上

cpp 复制代码
	void foo(const int val);	// foo中不可修改val
b. const 修饰函数返回值

函数返回const返回值,主要用于函数返回const引用。

cpp 复制代码
const int foo()
{
	int a = 1;
	return a;
}

3. const 修饰类

a. const 修饰类成员

同修饰变量

cpp 复制代码
class A
{
	const int a = 0;
};
b. const 修饰成员函数

const成员函数指的是,此函数不应该修改任何成员变量;但是mutable 修饰的变量可以被修改

传给const成员函数的this指针,是指向 const 对象 的 const 指针。

cpp 复制代码
class A
{
	int a;

	int getA const()
	{
		return a;
	}
};

PS: 静态成员变量并不属于某个类对象,而是整个类共有的。静态成员变量可以不依附于某个实例化后的类对象进行访问。那么,静态成员变量的值,应该在任何实例化操作之前,就能够进行改变(否则,只有实例化至少一个对象,才能访问静态成员)。所以,静态成员变量不能够由构造函数进行内存分配,而应该在类外部单独定义,在实例化任何对象之前,就开辟好空间。又由于 const 成员变量 必须初始化,所以静态成员变量必须在定义的时候就初始化。

c. const 修饰类实例

const类对象指的是,此类对象不应该被改变。

类对象的 "改变" 定义:改变任何成员变量的值,调用任何非const成员函数

相关推荐
Tanecious.28 分钟前
C++--红黑树
开发语言·c++
Top`32 分钟前
Java 泛型 (Generics)
java·开发语言·windows
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
如何使用Java WebSocket API实现客户端和服务器端的通信?
java·开发语言·websocket
Shartin1 小时前
Can201-Introduction to Networking: Application Layer应用层
服务器·开发语言·php
共享家95272 小时前
linux_线程概念
linux·开发语言·jvm
apihz2 小时前
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
android·服务器·开发语言·网络·数据库·网络协议·tcp/ip
tanyongxi663 小时前
C++ Map 和 Set 详解:从原理到实战应用
开发语言·c++
飒飒真编程3 小时前
C++类模板继承部分知识及测试代码
开发语言·c++·算法
博睿谷IT99_4 小时前
华为数据通信网络基础
开发语言·华为·php·华为认证
蓝桉(努力版)4 小时前
MATLAB可视化5:华夫图(饼图的平替可以表示种类的分布,附有完整代码详细讲解)(求个关注、点赞和收藏)(对配色不满意可以自己调节配色,附调色教程)
开发语言·数学建模·matlab·信息可视化·matlab可视化