欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于const的那些事

程序员文章站 2022-05-06 18:19:27
...

最近在通过 C++ Primer 这本书复习C++。在看到const这一节中,看到了很多容易混淆的几个点,因此记录下来。

为什么使用const

在程序中,如果经常用到一个数字,那么就可以将它定义为一个变量,这样,在改变一个数字的时候,就只需要改变这个变量的值就好了,这样在使用次数很多的时候,会大大减小工作量。

但是在程序中,很容易就造成该变量的数值变化了,而且有些是很不容易发现的错误。

就像是

#include <iostream>
using namespace std;
int main() {
    int a = 1024;
    if (a = 1) { // 在这里,就对 a 的值进行了修改,而且是很不容易发现的错误
        // ...
    }
    return 0;
}

所以,此时就需要 const 类型的变量。

所谓 const 类型的变量,是指的在C++中,const 关键词告诉编译器,这个变量的值是不变的,不能对其进行修改,也就是我们常说的 Read-Only 类型的变量。

const的定义方法

在定义 const 变量的时候,因为常量在定义后不能对其值进行修改,所以,在定义的时候,一定要进行初始化。例如

const int a = 1024;
const在指针中的应用

在实际中,指向常量的指针,往往被用于函数参数

一、
试图将一个非 const 对象的指针指向一个常量对象,会引起编译错误。

const double a = 10;
double *p = &a; // Error.

二、
const double *p; 定义一个指向 double 类型的 const 对象的指针,可以从右向左理解,p是一个指向 double 类型的、被定义为 const 类型 的指针。我们可以对其进行重新赋值,使其指向不同的对象,但是不能改变 p 指向的对象的数据。

#include <iostream>
using namespace std;
int main() {
    double a = 10, b = 12;
    const double *p = &a;
    *p = 11; // Error.
    p = &b; // OK.
    return 0;
}

三、
int *const p = &a;定义一个指向非 const 对象的 const 指针,可以从右向左理解,p是一个指向 int 类型对象的 const 指针。它不能指向 const int 类型的对象。