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成员函数

相关推荐
星释12 小时前
Rust 练习册 75:ETL与数据转换
开发语言·rust·etl
happyjoey21712 小时前
使用Qt自带的Maintenance Tool将Qt6.9升级为QT6.10
开发语言·qt
p***h64316 小时前
JavaScript在Node.js中的异步编程
开发语言·javascript·node.js
散峰而望16 小时前
C++数组(二)(算法竞赛)
开发语言·c++·算法·github
Porunarufu16 小时前
Java·关于List
java·开发语言
子不语18016 小时前
Python——函数
开发语言·python
利刃大大16 小时前
【动态规划:背包问题】完全平方数
c++·算法·动态规划·背包问题·完全背包
ndjnddjxn17 小时前
Rust学习
开发语言·学习·rust
月光技术杂谈17 小时前
实战:C驱动框架嵌入Rust模块的互操作机制与完整流程
c语言·开发语言·rust·ffi·跨语言·bindgen·互操作
t1987512817 小时前
基于MATLAB的指纹识别系统完整实现
开发语言·matlab