const关键字

修饰全局变量

#define PI1 3.14
const double PI2 = 3.14;
/*两种方式都可以用来定义全局变量。不过,第二种要比
第一种方式要好,使用宏定义的变量,其信息一般以表格
的形式储存在系统中,当我们在调试程序时,就有可能使
得这个宏定义的变量反复出现在符号表中。而const修饰
的变量会一直出现在符号表,使得我们调试方便许多。*/

常量指针

const int *p1 = 100;   //常量整形指针
int *const p2 = 200;   //整形常量指针
 
/*常量整形指针,不能通过这个指针修改它所指向的变量,
指针本身是可变的。
整形变量指针,指针不可修改,但是指向的变量可以修改*/

不能把常量指针赋值给非常量指针,反过来可以。

const int *p1;
int *p2;
p1 = p2;//ok
p2 = p1;//error
p2 = (int *)p1;//ok,强制类型转换
/*假如p1的值可以直接赋予p2,那么可以通过p2直接修改p1所指向的变量,所以必然不能直接赋值*/

例子:

void Myprintf(const char* p)
{
    strcpy(p, "this");//error
    printf("%s", p);
}

修饰类成员函数

class student {
public:
    student(int age) :_age(age) {}
    void getAge()const {      //不希望通过函数来改变类的私有变量
        _age = 100;       //错误,编译器会报警
        cout << _age << endl;
    }
private:
    int _age;
};
 
/*如果我们在定义一个类的成员函数时,并不希望这个函数能够改变类的
私有变量,这时我们可以使用const将这个成员函数定义为常量函数,这样,
这个函数就不能修改私有变量了。*/

参考博客:https://blog.csdn.net/weixin_37720172/article/details/68946534

你可能感兴趣的:(const关键字)