1.关键字介绍和使用场景
const 是C++中的关键字,用于声明常量或指定对象的只读性。它可以用在多种上下文中,包括变量、函数、指针等。
1.1常量变量
const int myConst = 42; // 常量整数
这里 myConst 被声明为一个整数常量,其值不能被修改。
1.2常量指针
/*ptr 是一个指向整数常量的指针,
它可以指向一个普通整数,但不能通过这个指针修改所指向的值*/
int i = 10;
const int* ptr = &i;
cout << *ptr << endl;
// *ptr = 20; 报错 表达式必须是可以修改的左值
1.3指向常量的指针
int y = 20;
int* const ptr2 = &y; // ptr2 是常量指针,指向整数 y
cout << *ptr2 << endl; //输出20
// 以下操作是合法的
y = 30; // 通过普通变量 y 修改值
cout << *ptr2 << endl;//输出30
// 以下操作是非法的,会导致编译错误
//ptr2 = 30; // 试图改变指针的指向
1.4常量成员函数
class MyClass {
public:
void myMethod() const {
// 不能修改对象的成员变量
}
};
在类中,const 修饰成员函数表示该函数是常量成员函数,即它不会修改对象的成员变量。
2.优点总结
- 可读性和清晰性:
const 帮助标识常量,使得代码更易读和理解。它明确了某个实体(变量、指针、引用、成员函数等)的只读性。
- 安全性:
防止无意间的修改。通过使用 const,可以避免在程序中对不应该被修改的数据进行错误的修改。
- 自文档性:
const 的使用可以使代码更具自文档性,提供了对程序员和代码阅读工具的更多信息,减少了使用者犯错的可能性。
- 优化:
const 可以帮助编译器进行更好的优化,因为它提供了一些额外的信息,例如某个变量是否在函数中被修改。
- 接口设计:
在类的接口中使用 const 可以指定哪些成员函数不会修改对象的状态,从而提供更清晰的设计和使用接口的方式。
函数参数传递:
使用 const 引用作为函数参数,可以避免不必要的对象拷贝,提高程序的效率。
- 防止意外修改:
对于指针和引用,使用 const 可以防止通过它们修改底层对象的值。
- 常量表达式:
const 可以用于声明常量表达式,这些表达式在编译时就能够计算出结果,有助于优化。
- 总体而言,const 的使用有助于提高代码的质量、可维护性和可读性。在适当的情况下使用 const 是一种良好的编程实践。
3.面试题
**说说const int a, int const a, const int a, int const a, const intconst a分别是什么,有什么特点。
1. const int a; //指的是a是一个常量,不允许修改。
2. const int *a; //a指针所指向的内存里的值不变,即(*a)不变
3. int const *a; //同const int *a;
4. int *const a; //a指针所指向的内存地址不变,即a不变
5. const int *const a; //都不变,即(*a)不变,a也不变
简述const和const的区别
//const* 是常量指针,*const 是指针常量
int const *a; //a指针所指向的内存里的值不变,即(*a)不变
int *const a; //a指针所指向的内存地址不变,即a不变