C++中const关键字的使用详解

目录

一、引言

二、const关键字与变量

2.1 、const修饰基本数据类型

2.2、const修饰指针类型

2.2.1、const在 * 号之前

2.2.2、const在*号之后

三、const关键字与引用

3.1 权限放大

3.2 权限缩写

四、cosnt关键字与类

4.1、修饰成员变量

4.2、修饰成员函数

一、引言

        const是C和C++中一个十分重要的关键字,它在变量,函数,类,引用,指针中的有着十分重要的作用,本文将详细介绍const关键字在C++中的作用。

二、const关键字与变量

首先,讲解const关键字修饰变量,将从两个方面讲解。

2.1 、const修饰基本数据类型

        在平常代码的编写中我们有时并不希望一些数据被修改,我们可以用const关键字对其进行修饰例如下面的代码 ,对于const修饰的a来说 a的值是无法修改的。

int main()
{
    const int a = 5;
    //此时a被const所修饰变量a是无法被修改的
    //a = 10;
    return 0;
}

但是通过取出a的地址,对a进行解引用操作最终还是能够修改a的值但是这样就失去了const关键字的作用。

        注:const修饰的a虽然能够被修改但是a仍然是变量并不是常量,我们可以通过下面的代码进行验证,在C99中是不支持变长数组的,如果const修饰的NUM是常量,那么就可以在数组创建时写成int a[NUM];但是编译器会报错,说明const修饰的依旧是变量。

int main()
{
    const int NUM = 5;
    int a[NUM];//此处在C99中会报错
    return 0;
}
2.2、const修饰指针类型

const对于指针也有着十分重要的作用,分为两种情况

2.2.1、const在 * 号之前

        当const在 * 号之前时(const int * 或 int const *)是对指针中的内容进行修饰,代表指针中的内容是无法修改,但是指针的指向是可以改变的,如下面的代码所示。

C++中const关键字的使用详解_第1张图片

2.2.2、const在*号之后

        当const在 * 号之后时(int * const)是对指针的指向进行修饰,指针的指向不能够被修改,但是指针中的内容是可以被修改的,如下面的代码所示。

C++中const关键字的使用详解_第2张图片

三、const关键字与引用

在C++中const对于也有很大的作用,将从两个s方面进分析

3.1 权限放大

        对于const 修饰的a来说 ,a已经被const修饰了,那么对于b来说b是a的别名,那么b可以修改a中的内容,但是a被const进行了修饰,说明int &b = a把 a权限进行了放大是不被允许的。

int main()
{
	const int a = 10;
    //权限放大,编译器报错
	//int &b = a;
	return 0;
}

        还有一种权限放大的情况是 int &a = 10 对于10来说 10是常量是不能够被修改的但是对于a 是10的引用,可以对10进行修改,这也是一种权限的放大是不被编译器允许的。

3.2 权限缩小

        在C++中对于一个int类型的变量可以是可以进行权限的缩小的,如下面代码所示,定义一个int类型的变量c。const修饰的引用b是c的别名,对于b来说,由于b是由const修饰的,所以b无法对c中的内容进行修改,这是允许的,是权限的缩小。 

int main()
{
	const int a = 10;
	int &b = a;
	return 0;
}

四、cosnt关键字与类

4.1、修饰成员变量

在定义的类中成员变量也可以用const进行修饰,被const关键词修饰的成员变量,也是不能够被修改的

注:在一个类中的const 成员变量只能在构造函数中的初始化列表被初始化!

原因:因为const修饰的变量只能够初始化,不能够赋值,在进入函数体内const变量都已经用不确定的值初始化好了,构造函数做的只有赋值,而const类型不能够赋值,所以需要在初始化列表中初始化

class A
{
public:
	class A(int aa)
		:_aa(aa)
	{}

    //编译错误 const修饰的成员变量无法被修改
    /*void func()
	{
		_aa = 10;
	}*/

	//编译错误
	/*class A(int aa)
	{
		_aa = aa;
	}*/

private:
	const int _aa;
};
4.2、修饰成员函数

        将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改如下面的动物类为例定义一个const成员函数。

class Animal
{
public:
	Animal(char* name, char* kinds)
	{
		_name = name;
		_kinds = kinds;
	}
	void print() const
	{
		//const成员函数 成员变量不能修改否则编译器一定会报错
		//_name = "猫";
		cout << _name << _kinds << endl;
	}

private:
	char* _name;
	char* _kinds;
};

在成员函数的后面加上const代表该函数是成员函数,成员变量是不能被修改的

有关const static相关的详细使用:类和对象(下)/类和对象(下) · 懒惰的西望/lazy_study_cpp - 码云 - 开源中国 (gitee.com)

你可能感兴趣的:(c++,开发语言)