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

相关推荐
sinat_6020353610 分钟前
模块与包的导入
运维·服务器·开发语言·python
恋雨QAQ11 分钟前
python函数和面向对象
开发语言·python
天雪浪子30 分钟前
Python入门教程之逻辑运算符
开发语言·python
骄傲的心别枯萎40 分钟前
RV1126 NO.16:通过多线程同时获取H264和H265码流
linux·c++·音视频·rv1126
落羽的落羽44 分钟前
【C++】特别的程序错误处理方式——异常机制
开发语言·c++
空山新雨(大队长)1 小时前
C 语言第一课:hello word c
c++·c·exe
春蕾夏荷_7282977251 小时前
c++ 第三方库与个人封装库
c++·三方库
通达的K1 小时前
Java实战项目演示代码及流的使用
java·开发语言·windows
牵牛老人1 小时前
Qt C++ 复杂界面处理:巧用覆盖层突破复杂界面处理难题之一
数据库·c++·qt