返回

品鉴常数const在C++中的妙用

闲谈

在C++中,常量是不可变的数据,一旦被初始化就无法更改。常量const可以用来修饰任何作用域内的变量、函数参数、函数本体、函数返回值、成员函数、迭代器,也可以用来修饰指针本身和指针目标。

1. 修饰变量

当const修饰一个变量时,该变量就成为了只读变量,只能在声明时初始化,之后不能再改变其值。这可以防止变量被意外更改,从而提高代码的安全性。例如:

const int x = 10;
x = 20; // 编译错误:试图修改只读变量

2. 修饰函数参数

当const修饰一个函数参数时,该参数就成为了只读参数,在函数体内不能改变其值。这可以防止函数意外修改参数的值,从而提高代码的可靠性。例如:

void f(const int x) {
  // x = 20; // 编译错误:试图修改只读参数
}

3. 修饰函数本体

当const修饰一个函数本体时,该函数就成为了const函数,不能修改对象的状态。这可以防止函数意外修改对象的状态,从而提高代码的安全性。例如:

class MyClass {
public:
  int x;
  void f() const {
    // x = 20; // 编译错误:试图修改对象的状态
  }
};

4. 修饰函数返回值

当const修饰一个函数返回值时,该函数就成为了const函数,其返回值是只读的。这可以防止函数意外修改返回值,从而提高代码的可靠性。例如:

const int f() {
  return 10;
}

5. 修饰成员函数

当const修饰一个成员函数时,该成员函数就成为了const成员函数,不能修改对象的状态。这可以防止成员函数意外修改对象的状态,从而提高代码的安全性。例如:

class MyClass {
public:
  int x;
  void f() const {
    // x = 20; // 编译错误:试图修改对象的状态
  }
};

6. 修饰指针

当const修饰一个指针时,该指针就成为了const指针,不能修改指针所指向的内存。这可以防止指针意外修改内存中的数据,从而提高代码的安全性。例如:

const int* p = &x;
*p = 20; // 编译错误:试图修改const指针所指向的内存

7. 修饰迭代器

当const修饰一个迭代器时,该迭代器就成为了const迭代器,不能修改迭代器所指向的元素。这可以防止迭代器意外修改容器中的元素,从而提高代码的安全性。例如:

vector<int> v = {1, 2, 3};
for (const auto& x : v) {
  // x = 20; // 编译错误:试图修改const迭代器所指向的元素
}

总之,const是一个非常强大的关键字,它可以用来修饰任何作用域内的变量、函数参数、函数本体、函数返回值、成员函数、迭代器,也可以用来修饰指针本身和指针目标。通过对const的深入理解,你可以编写出更安全、更高效的C++代码。