• C++随笔(0)——关于const


    最近发现自己对const这一块其实不甚熟悉,所以复习一下const的相关知识点。

    基本用法

    const int bufSize = 512;
    

    上面这样就可以将bufSize定义为常量,编译的时候编译器会把用到该变量的地方都替换成对应的值。在代码运行过程中无法为常量另外赋值:

    bufSize = 1024;
    

    注意,一定要给定一个值来初始化常量,初始值可以是表达式:

    const int j = get_size();
    

    const只限定不能执行会更改到内容的操作,其他的操作例如将const变量的值复制给另一个变量是可以的。

    int i;
    i = bufSize;
    

    作用范围

    定义好的const变量只有在当前文件下才能被访问到,所以在多个文件中定义了同名的const变量的时候其实就等同于在不同文件中分别定义了独立的变量。如果想要在不同文件中共享一个初始值不是常量表达式的常量,那么就要在定义以及其他文件的声明中加上extern

    // file1.cpp
    extern const int bufSize = fcn();
    
    // file2.cpp
    extern const int bufSize;
    

    左定值,右定向

    const int *p = 8;
    

    上面这样写就是让const修饰指针指向的内容,内容必须是常量。

    int a = 8;
    int* const p = &a;
    *p = 9; // 可以更改指向对象的值
    int b = 7;
    p = &b; // 不能够更改指向方向
    

    上面这样则是指针为常量,但是指针指向的内容可以变。其实const只是限定了权限,只限定自己修饰的那部分不能够被改变值。

    还有同时修饰指针和指针指向的内容的情况:

    int a = 8;
    const int *const p = &a;
    

    修饰成员函数

    #include<iostream>
    
    using namespace std;
    
    class Test
    {
    public:
        Test(){}
        Test(int _m):_cm(_m){}
        int get_cm()const
        {
           return _cm;
        }
    
    private:
        int _cm;
    };
    
     
    
    void Cmf(const Test& _tt)
    {
        cout<<_tt.get_cm();
    }
    
    int main(void)
    {
        Test t(8);
        Cmf(t);
        system("pause");
        return 0;
    }
    

    这样写get_cm就不允许修改成员变量。

    参考

    《C++ Primer 第5版》:看就是了,别废话
    C++ const 关键字小结

  • 相关阅读:
    String类
    关于 this 关键字的使用
    面向对象案例
    js 保留2位小数
    label包裹input,点击label响应两次解决方法
    JQuery的datetimepicker插件,起始日期&结束日期相互约束
    JSP JSTL日常使用集锦
    js操作select用法集锦
    js利用window.print实现局部打印方法
    前端开发人员实用Chrome插件集锦
  • 原文地址:https://www.cnblogs.com/yejianying/p/cpp_memo_0_const.html
Copyright © 2020-2023  润新知