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;
}
相关推荐
Larry_Yanan11 小时前
QML学习笔记(四十二)QML的MessageDialog
c++·笔记·qt·学习·ui
R-G-B11 小时前
【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
c++·mfc·mfc运行 不显界面·mfc界面不显示
Madison-No712 小时前
【C++】探秘vector的底层实现
java·c++·算法
晚风残12 小时前
【C++ Primer】第十二章:动态内存管理
开发语言·c++·c++ primer
liu****12 小时前
8.list的模拟实现
linux·数据结构·c++·算法·list
保持低旋律节奏12 小时前
C++ stack、queue栈和队列的使用——附加算法题
c++
初圣魔门首席弟子13 小时前
【C++ 学习】单词统计器:从 “代码乱炖” 到 “清晰可品” 的复习笔记
开发语言·c++
十五年专注C++开发13 小时前
CFF Explorer: 一款Windows PE 文件分析的好工具
c++·windows·microsoft
郝学胜-神的一滴13 小时前
计算机图形学中的光照模型:从基础到现代技术
开发语言·c++·程序人生·图形渲染
深耕AI15 小时前
MFC + OpenCV 图像预览显示不全中断问题解决:GDI行填充详解
c++·opencv·mfc