C++关键字const基本用法

本文详细解析C++中const修饰符的多种用途,包括修饰常量、引用、指针及对象,阐述其在提高代码质量和安全性方面的作用。

1. 修饰常量

最基本的用法,用const修饰一个变量,表示这是一个常量,这种用法可以代替C语言里面的宏定义。注意要在声明时初始化,如果是类的数据成员,则在构造函数的初始化列表中初始化。



 

2. 修饰引用,指针

对一个常量的引用或指针要用常指针,也就是不能修改所引用、指向的变量。如果不使用常引用、指针,则须用const_cast<>进行转换。指向字符char的常指针经常用来表示字符串,像windows中的LPCSTR就是const char *。

 

3. 修饰对象

如果修饰的是一个对象,则表示该对象的数据成员均为常量,并且只能调用该对象的常成员函数,这一点在后面解释。综合1、2、3条得出,const修饰符表示所修饰的内存区域被上了锁,不能修改。对一个对象的常引用经常用来函数传参,当函数参数为对象是,直接按值传参会调用对象拷贝构造函数,复制对象,对程序效率造成影响,所以一般按引用传参,为了不改变传入的参数,要加const表示是常引用。

 

4. 另外一种const修饰指针的方法

也就是著名的const char *和char * const的区别的问题。const char *前面说过,意思是常指针,char*所指的内存区域不能被修改,用来表示字符串。而char * const的意思指针所指向的位置不能修改,也就是该指针不能指向其他内存区域了,这和引用很像,char * const相当于char &,所以常引用const char &相当于const char * const,也就是指针指向谁不可变,指针指向的内容也不可变。注意const是写在了*的前面还是后面,这是唯一区别,char const *的意思和const char *是一样的。

 

5. 修饰成员函数

在一个类的成员函数的参数表后面加上const,表示这是一个常函数,这个函数不会修改该对象数据成员的内容,这个函数也不能调用普通的成员函数,只能调用常函数。其实,常函数是指隐式传入的this指针是个常指针。这种写法可以让编译器帮助我们避免一些错误发生。另外,一个被const修饰的对象,只能调用它的常函数。

### C++ 中 `const` 关键字的具体用法和场景 在 C++ 中,`const` 关键字用于定义常量或声明不可修改的变量、函数参数、返回值以及类成员函数等。它确保程序中某些数据在特定范围内不可被更改,从而提高代码的安全性和可读性[^1]。 #### 1. 常量定义 `const` 可以用来定义一个常量值,该值一旦初始化后就无法改变。 ```cpp const int MAX_SIZE = 100; ``` 这里的 `MAX_SIZE` 是一个整型常量,不能通过赋值操作进行修改[^2]。 #### 2. 函数参数中的 `const` 当函数的参数是一个引用或指针时,使用 `const` 可以防止函数内部修改传入的参数。 ```cpp void printValue(const int& value) { // value = 10; // 编译错误:不能修改 const 引用 std::cout << value << std::endl; } ``` 这样可以保护调用者的数据不被意外修改[^3]。 #### 3. 返回值中的 `const` 将函数的返回值声明为 `const`,可以防止返回值被修改或通过返回值修改原始数据。 ```cpp const std::string& getString() const { return internalString; } ``` 上述代码中,返回值是一个常量引用,调用者无法修改 `internalString` 的内容[^4]。 #### 4. 类成员函数中的 `const` 对于类的成员函数,如果其不会修改对象的状态,可以将其声明为 `const` 成员函数。 ```cpp class Example { private: int value; public: int getValue() const { return value; // 不会修改成员变量 } }; ``` 这表明 `getValue` 函数不会改变类的任何成员变量状态,增强了代码的安全性[^5]。 #### 5. 指针与 `const` `const` 在指针中的使用非常灵活,可以限制指针本身或指针指向的内容是否可变。 - **指向常量的指针**:指针指向的内容不可修改。 ```cpp const int* ptr = &value; // *ptr 不能修改 ``` - **常量指针**:指针本身不可重新指向其他地址。 ```cpp int* const ptr = &value; // ptr 不能指向其他地址 ``` - **常量指针指向常量**:指针本身和指向的内容均不可修改。 ```cpp const int* const ptr = &value; // 指针和内容均不可修改 ``` #### 6. `const` 修饰类成员变量 类中的成员变量可以被声明为 `const`,但需要在构造函数的初始化列表中进行初始化。 ```cpp class Example { private: const int fixedValue; public: Example(int val) : fixedValue(val) {} }; ``` 这种方式确保了 `fixedValue` 在对象创建后不可更改[^6]。 --- ### 总结 `const` 关键字C++ 中用于增强代码安全性和可维护性的重要工具。它可以用于定义常量、保护函数参数、限制返回值修改、声明只读成员函数以及控制指针的行为。正确使用 `const` 能够减少潜在的错误并使代码更加清晰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值