c++中const用法

const是用于保护程序的健壮性,减少程序隐患。
const的用法比较复杂,总结起来又分为以下两种:
1:在定义变量时使用:  

   a: const int a=100; 最简单的用法,说明变量a是一个常变量;
   b: int const b=100; 与a功能相同;
   c: const int *a=&b; 指向常数的指针,即指针本身的值是可以
      改变的,但指向的内容是不能改变的;
   d: int const *a=&b; 与c功能相同;
   e: int * const a = &b; 常指针,即指针本身的值是不可改变的,
      但指向的内容是可改变的;
   f: const int * const a = &b;指向常数的常指针,即指针本身与
      指向的内容都是不可改变的;
   g: const int &a=100; 常数引用,即不能改变引用的值;
  
   总结: 在使用const定义变量时,一定要进行初始化操作,在操作
   符(*,&)左边的修饰的是指向的内容,在右边的是本身。
  
2:在函数用使用:

   a: void func(const int a); 做为参数使用,说明函数体内是不
      能修改该参数的;对不参数定义时不同的形式,可参见定义变量
      时使用方式;
   b: const int func(); 做为返回值使用,说明函数的返回值是不
      能被修改的,在取得返回值时应用const int a = func();对不
      参数定义时不同的形式,可参见定义变量时使用方式;
   c: int func() const; 常函数,说明函数是不能修改类中成员的
      值的,只能用于类的成员函数中;
     
   总结:在函数中使用const,情况与定义变量的情况大致相同。 

1)指向常量的指针变量 
指针本身的内容可改变,但不会通过该指针改变所指向的内容。例如:
const int MAX=3;
const int * iPointer = &MAX;
iPointer = new int;
是合法的。
*iPointer=2;//非法
*iPointer += 3;//非法,它不可以改变指针所指向的内容。
应该明确,指向常量的指针是可以指向变量的。下列语句成立:
int k=5;
const int * iPointer = &k;


2)指向变量的指针常量 (类似引用)
指针本身不会在运行时改变,但是指向内容可以改变。例如:
int size = 5;
int * const iConstPointer = &size;
//指针常量必须在定义的时候初始化确定它的指(内容)
iConstPointer = new int;//非法
(* iConstPointer)++;//合法


3) 指向常量的指针常量
不仅是指针本身不能修改,它所指向的内容也不能通过它改变。
const in MAX = 30;
const int * const ip = &MAX;


4) 常量引用
常量指针和常量引用仅保证被指向和引用的值不会直接和间接地通过这个指针或引用而修改,但并不是保证这个值本身不会改变。例如:
int k = 8;
const int & m = k;
k+=7;//合法 k本身(没有通过m)改变,当然再访问m得到的值也变成15。


总结:
const int * ip; //常量指针
*ip不可修改,ip可以修改
int * const ip = “abcd”;//指针常量
*ip可以修改,ip不可修改,定义是需初始化
const int * const ip = “abcd”;//常量指针常量
*ip不可修改,ip不可修改,定义是需初始化

### C++ 中 `const` 关键字的使用方法和场景 #### 1. 声明常量 `const` 可用于声明一个常量,表示变量的值在初始化后不可修改。它可以应用于基本数据类型、对象、指针等。例如: ```cpp const int MAX_VALUE = 100; // 声明一个整型常量 ``` `const` 变量的值可以在运行时确定,这意味着它可以被初始化为在编译时未知的值,比如函数返回值或者用户输入[^2]。 #### 2. 指针与 `const` `const` 在指针中的使用有多种情况,具体取决于将 `const` 放置的位置: - **指针常量**:指针本身可变,但不能修改它指向的数据。 ```cpp const int *ptr; // ptr 指向的数据是 const 的 int value = 10; ptr = &value; // 合法 *ptr = 20; // 错误:ptr 指向的值是 const 的 ``` - **指向常量的指针**:指针指向的数据不可变,但指针本身可以指向其他数据。 ```cpp int *const ptr = &value; // ptr 本身是 const 的 *ptr = 20; // 合法 ptr = &anotherValue; // 错误:ptr 是 const 的 ``` - **指向常量的常量指针**:指针本身和它指向的数据都不可变。 ```cpp const int *const ptr = &value; // 指针和指向的数据都是 const 的 ``` #### 3. 函数参数中的 `const` 在函数中使用 `const` 参数可以防止函数内部对参数的修改。这不仅提高了代码的安全性,还允许函数接受常量或临时对象作为参数[^3]。例如: ```cpp void printValue(const int& value) { // value 不可被修改 } ``` #### 4. 成员函数中的 `const` 在类中,`const` 可以修饰成员函数,表示该函数不会修改对象的状态。这种用法特别适用于只读操作[^4]。例如: ```cpp class MyClass { int x; public: MyClass(int val) : x(val) {} int getX() const { return x; } // 承诺不修改 x }; ``` 上述代码中,`getX()` 被标记为 `const`,因此它可以在 `const` 对象上调用。 #### 5. 返回值中的 `const` 使用 `const` 修饰返回值可以防止返回值被修改。例如: ```cpp const std::string& getString() const { return internalString; } ``` 这样可以避免返回值被意外修改,同时减少不必要的拷贝操作[^1]。 --- #### 示例代码 以下是一个综合示例,展示了 `const` 在不同场景中的应用: ```cpp #include <iostream> using namespace std; // 带 const 参数的函数 void modifyValue(const int& value) { // value 不可被修改 cout << "Value: " << value << endl; } // 类中的 const 成员函数 class Example { int data; public: Example(int val) : data(val) {} int getData() const { return data; } // 承诺不修改 data }; int main() { const int maxValue = 100; // 常量声明 modifyValue(maxValue); Example obj(42); cout << "Data: " << obj.getData() << endl; return 0; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值