const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。
目录
一、const的作用
二、const修饰普通类型的变量
三、const修饰指针变量
四、const参数传递和函数返回值。
五、const修饰类成员函数。
总结
参考文档
一、const的作用
const的作用如下表所示:
二、const修饰普通类型的变量
1、const修饰普通类型的变量被赋值后,其值不允许被修改。
const int a = 7; a = 8; // 错误,a 被编译器认为是一个常量,其值不允许修改。
2、const int a和intconst a两者定义的性质一样。
三、const修饰指针变量
const 修饰指针变量有以下三种情况。
(1)如果const位于 * 的左侧,const 修饰指针指向的内容,则内容为不可变量,简称左定值;
int a = 7;int b = 8;const int* c = &a;*c = b; //错误:指针指向的内容不可修改c = &b;//正确:指针可以修改
(2)如果const位于*的右侧,const 修饰指针,则指针为不可变量,简称右定向;
int a = 7;int b = 8;int* const c = &a;*c = b; //正确:指针指向的内容可修改c = &b;//错误:指针为不可变量
(3)const 修饰指针和指针指向的内容,则指针和指针指向的内容都为不可变量。
int a = 7;int b = 8;const int* const c = &a;*c = b;//错误:指针指向的内容不可修改 c = &b;//错误:指针为不可变量
根据上面三种情况总结出便于记忆的话:"左定值,右定向,const修饰不变量"。
四、const参数传递和函数返回值。
1、const传递参数
对于 const 修饰函数参数可以分为三种情况:
(1)值传递的 const 修饰传递,传递过来的参数在函数内不可以改变。
#include<iostream>using namespace std;void func(const int p){cout << "p = " << p << endl;//++p;//错误:p值不能修改}int main(){int a = 10;int b = 20;func(a);func(b);return 0;}
(2)当 const 参数为指针时,可以防止指针被意外篡改。
#include<iostream>using namespace std;int b = 30;void func(int* const p){cout << "*p = " << *p << endl;++*p;//p = &b;//错误:p不能被修改}int main(){int a = 10;func(&a);cout << "a = " << a << endl;return 0;}
(3)自定义类型的参数传递,需要临时对象复制参数,对于临时对象的构造,需要调用构造函数,比较浪费时间,因此我们采取 const 外加引用传递的方法。并且对于一般的 int、double 等内置类型,我们不采用引用的传递方式。同时,传递的对象不能被修改。
/*定义一个学生类,获取学号*/#include<iostream>using namespace std;class Student{public:Student(){}Student(int num):number(num){}int get_number()const{return number;}int set_number(int num);private:int number;};void get_student_number(const Student& stu){cout<<stu.get_number()<<endl;//stu.set_number(3333);//对象stu不能被修改}int Student::set_number(int num){this->number = num;return this->number;}int main(void){Student RF(1001);get_student_number(RF);int rf_num = RF.set_number(2222);cout << "rf_num = " << rf_num << endl;return 0;}
2、const 修饰函数的返回值
Const 修饰返回值分三种情况。
(1)const 修饰内置类型的返回值,修饰与不修饰返回值作用一样,因此这种写法没有意义。
const int func1(){return 1;}int func2(){return 2;}
(2)const 修饰自定义类型的作为返回值,此时返回的值不能作为左值使用,既不能被赋值,也不能被修改。
(3)const 修饰返回的指针或者引用,是否返回一个指向 const 的指针,取决于我们想让用户干什么。
一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。原因如下:如果返回值为某个对象为const(const A test = A 实例)或某个对象的引用为const(const A& test = A实例) ,则返回值具有const属性,则返回实例只能访问类A中的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少用到。
五、const修饰类成员函数。
const 修饰类成员函数,其目的是防止成员函数修改被调用对象的值,如果我们不想修改一个调用对象的值,所有的成员函数都应当声明为 const 成员函数。
总结
关const一般的考点有两点:
1、const与define的区别
2、const char a,const char* a, char* const a 的含义。
参考文档
/Eric_Jo/article/details/4138548
/Forever-Kenlen-Ja/p/3776991.html
如果觉得《C++ const用法详解》对你有帮助,请点赞、收藏,并留下你的观点哦!