C++ const修饰符详解 【建议收藏】
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
const修饰符可以修饰指针、数据成员、成员函数和类对象。接下来分别进行解释:
1.修饰指针
const 对象一旦创建就不能改变,所以const对象必须初始化。可以是任意的表达式;
const int i = get_size(); //true
const int j = 42; //true
const int k; //false
(1)指针常量
例如:int a = 10; int * const p = &a;
const 修饰的是p这个指针,所以是指针常量,指针的地址不能改变,但是指针的内容可以改变。
int a = 10;
int b = 299;
int* const p = &a;
a = 999; // true 可以通过原来的变量修改值
*p = 100; // true
p = &b; // false
(2)常量指针
例如:int a = 10; const int *p = &a;(或 int const *p = &a;)
const 修饰的是其类型,指针指向的值不可改变,但是可以改变p的地址,因为p这里是一个变量。
int a = 10;
int b = 299;
int const *p = &a;
p = &b; // true
a = 999; // true
*p = 300; // false
(3)指向常量的指针常量
这个就比较简单了,地址和值都不能改变,如下所示:
int a = 10;
const int* const p = &a;
2.修饰数据成员
修饰数据成员的时候,初始化只能在参数列表里,被const修饰的数据成员,不能被修改。如下代码所示:
class Const_test{
public:
Const_test(int v):value(v){
}
private:
const int value;
};
3. 修饰成员函数
const放置的位置 : 函数声明之后,实现体之前。要求在声明和定义处都要有const修饰。const所修饰的成员函数能访问const和非const数据成员,但不能修改非const数据成员,只能访问const成员函数,不能访问非const成员函数。
构成重载:const对象只能调用const成员函数。非const成员对象,优先调用非const成员函数,若无,则可调用const成员函数。
class Const_test{
public:
Const_test(int v):value(v){
}
void display()const{
age = 10; //错误
int temp = 10; //正确
temp = age;
print();//错误
}
void dispaly(){//重载
}
void print(){
}
private:
int age;
const int value;
};
4. 修饰类对象
const修饰函数,是从函数层面,不修改数据。const修饰对象,是从对象的层面,不修改数据。只能调用const成员函数。
🎈 有任何疑问欢迎交流!
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
- 点赞
- 收藏
- 关注作者
评论(0)