美文网首页c++学习笔记
C++ const关键字使用

C++ const关键字使用

作者: 檀香静雪 | 来源:发表于2020-07-12 18:11 被阅读0次

    const定义常量

    在c语言中,我们学习过可以使用#define来定义常量。但是#define的原理是简单的替换,因此对于#define来说没有类型检查这回事。

    c++中提供了const关键字,用const关键字修饰的变量其值是不能修改的,因此可以使用const关键字来替换#define,这有益于编译器进行类型检查。

    const关键字定义变量如下代码所示:

    #include<iostream>
    using namespace std;
    const int MAX = 1000;
    const double PI = 3.14;
    const char NAME[] = "yurui";
    int main() {
        MAX = PI;//报错
        int a = PI;//警告
        return 0;
    }
    

    如上程序所示,使用const关键字定义了MAXPINAME三个全局变量。

    通过MAX = PI;对const修饰的变量进行赋值时会报错;通过int a = PI;进行赋值时编译系统会给出警告,提示类型不符合。

    通过上面的例子,我们可以看出,通过使用const关键字修饰常量,在使用时编译系统会进行类型检查。

    const定义常量指针

    通过const关键字定义常量指针,这样就不能通过指针修改变量的值。

    例如:

    #include<iostream>
    using namespace std;
    int main() {
        int a = 10;
        const int* p = &a;
        *p = 10;//报错
        a = 100;//正确
        return 0;
    }
    

    如上面的程序,定义常指针p,当我们通过p去修改其所指向的值时,编译器就会对其报错。

    但通过变量名还是可以修改其值,如a = 100;

    另外,观察下面代码:

    #include<iostream>
    using namespace std;
    int main() {
        const int* a;
        int* b;
        a = b;//正确
        b = a;//错误
        return 0;
    }
    

    对于常指针,我们可以直接对其赋值,如a = b;;对于非常量指针,我们不能使用常量指针对其进行赋值,如b = a;

    const修饰引用对象

    引用也可以用const关键字修饰,这样就不能通过引用名来修改变量值了。

    如下代码所示:

    #include<iostream>
    using namespace std;
    int main() {
        int a = 10;
        const int& r = a;
        a = 10;//正常
        r = 10;//报错
    }
    

    在执行到r=10;这条语句时编译器会报错,提示表达式必须是可修改的左值,因为我们再初始化引用时将其加上了了const关键字,我们就不能通过引用名来修改变量的值了。

    对于a = 10;这条语句则执行正常,因为a没有const关键字修饰。

    再考量下面的代码:

    #include<iostream>
    using namespace std;
    int main() {
        const int a = 10;
        const int& b = a;//正确
        int& r = a;//错误
        r = 100;//错误
        a = 100;//错误
        return 0;
    }
    

    对于用const关键字修饰的变量,我们在为其创建引用对象时,任然需要创建const类型的引用对象,且无法通过变量名或引用名来修改变量的值。

    相关文章

      网友评论

        本文标题:C++ const关键字使用

        本文链接:https://www.haomeiwen.com/subject/xzcncktx.html