C++的关键字const

const的用法

常量声明

const用于声明时必须进行初始化,大致格式为:<数据类型> const <常量名> = <值>

const <数据类型><常量名> = <值>。此时const的位置不影响语义

声明一个常量:

const 可以用于声明一个变量为常量。常量的值在声明后不能被修改

cpp 复制代码
int const a = 10;  // read-only variable  
int const  b;       // 错误!!!必须进行初始化
a++;               // 错误!!!不能对值进行更改
const int c = 10;  // read-only variable  

声明类的成员变量为常量

在类的声明中,可以使用 const 来声明成员变量为常量。这意味着不能修改这些成员的值

cpp 复制代码
class MyClass {
public:
	int const a = 1;  // read-only variable  
	int const b;      // 错误!!!必须进行初始化 
	const int c = 1;  // read-only variable  
	void func();
	void print_a();   
};
void MyClass::func() {
	this->a++;            // 错误!!!不能对值进行更改
}
void MyClass::print_a() {
	cout<<"a = "<<a<<endl; 
}
int main() {
	MyClass c;
	return 0;
}

声明常量数组:

const修饰数组。那么数组中的所有元素都被视为常量,不能被修改

cpp 复制代码
int const arrayA[5] = {1, 2, 3, 4, 5};
int const arrayB[5];                   // 错误!!!必须进行初始化
A[0] = 5;                              // 错误!!!数组中所有值能进行更改
const int arrayC[4]={1,2,3};

const和指针搭配

此时const的位置不同将会导致语义不同

声明常量指针

const 可以用于指针的声明。表明指针的值不可更改,即指向不可更改

  • 指针是一种特殊的数据类型,指针的值是某个数据的内存地址,即指针指向该数据
cpp 复制代码
int a = 10;
int b = 20;
int* const ptr = &a;
int* const p;   // 错误!!!常量指针声明时必须初始化
ptr = &b;        // 错误!!!常量的值初始化后不可改变,即常量指针的指向不可更改

声明指针常量

此时指针的值可以改变,即指针指向可以更改,但是指向的内存地址保存的内容不可更改

可以这么理解,由于 const intint cosnt语义相同,

那么int const* ptr = &a; const int* ptr = &a;语义相同。const修饰的是* ptr

cpp 复制代码
int a = 10;
int b = 20;
int const* ptr = &a; // 等价于 const int* ptr = &a;
  

函数中,声明参数变量为常量

const 可以用于函数参数的声明,该参数不能被修改,可以防止意外修改传入的参数值

cpp 复制代码
 void print(const int& num) { //调用函数时已经对参数进行初始化了
 	num++;                    // 错误!!!不能对值进行更改
    cout << num << endl;
}
// 也可以这样
void print(int const& num) { //调用函数时已经对参数进行初始化了
 	num++;                    // 错误!!!不能对值进行更改
    cout << num << endl;
}

声明常量类成员函数

常量类成员函数不可以修改所有的成员变量

c 复制代码
class myClass {
public:
//	const int a = 1;
	int age;
	
	void setAge() const; 
	void changeAge();
};
void myClass::setAge() const{
	age = 10;     // 错误!!!常量类成员函数不可以修改所有的成员变量
}

void myClass::changeAge() {
	age = 10;
}
相关推荐
鸽子炖汤32 分钟前
LRC and VIP
c++·算法·图论
鑫鑫向栄38 分钟前
[蓝桥杯]机器人塔
数据结构·c++·算法·蓝桥杯
好好学习O(∩_∩)O1 小时前
QT6引入QMediaPlaylist类
前端·c++·ffmpeg·前端框架
whoarethenext1 小时前
C/C++ OpenCV 矩阵运算
c语言·c++·opencv·矩阵运算
虾球xz2 小时前
CppCon 2014 学习:C++ Memory Model Meets High-Update-Rate Data Structures
java·开发语言·c++·学习
弥彦_2 小时前
线段树刷题记录
数据结构·c++·算法
凤年徐2 小时前
【数据结构初阶】顺序表的应用
c语言·开发语言·数据结构·c++·笔记·算法·顺序表
海码0073 小时前
【Hot 100】70. 爬楼梯
数据结构·c++·算法·leetcode·动态规划·hot100
凌康ACG3 小时前
易语言使用OCR
c++·yolo·c#·ocr·易语言
范纹杉想快点毕业4 小时前
C++多重继承详解与实战解析
开发语言·c++