zoukankan      html  css  js  c++  java
  • 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 关键字小结

  • 相关阅读:
    C#线程类Thread初步
    无限级分类存储过程版
    C#多线程编程实例实战
    数据库里阻塞和死锁情况 看那里死锁的存储过程
    预防按钮的多次点击 恶意刷新
    .net2.0文件压缩/解压缩
    HttpHandler和HttpModule入门
    反射,枚举,绑定下拉框
    在C#里关于定时器类
    判断上传的图片文件格式是否合法不是用后缀做的判断
  • 原文地址:https://www.cnblogs.com/yejianying/p/cpp_memo_0_const.html
Copyright © 2011-2022 走看看