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 分钟前
new 分配空间;引用
数据结构·c++
别NULL5 小时前
机试题——疯长的草
数据结构·c++·算法
CYBEREXP20086 小时前
MacOS M3源代码编译Qt6.8.1
c++·qt·macos
yuanbenshidiaos6 小时前
c++------------------函数
开发语言·c++
yuanbenshidiaos6 小时前
C++----------函数的调用机制
java·c++·算法
tianmu_sama7 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
羚羊角uou7 小时前
【C++】优先级队列以及仿函数
开发语言·c++
姚先生977 小时前
LeetCode 54. 螺旋矩阵 (C++实现)
c++·leetcode·矩阵
FeboReigns7 小时前
C++简明教程(文章要求学过一点C语言)(1)
c语言·开发语言·c++
FeboReigns7 小时前
C++简明教程(文章要求学过一点C语言)(2)
c语言·开发语言·c++