20200127-01 C++17 const 再学习 及 const 函数中修改成员变量

前言:

1 const 的用途

2 void t() const {} 修改成员变量 关键是使用 mutable 关键字 (查看 2.2 的示例)


正文:

一、const 的用途

1. 在 C++ 定义固定的变量

在 C 语言中定义一个 PI
#define PI 3.14

在 C++ 推荐使用 const
inline const double PI {3.14};

理由1 #define 无法进行类型检查,可能存在问题 #define PI "3.14" 这样应该在编译时候就发现的问题

理由2 #define 无法明确具体的应用范围,实际上只要包含 #define 所在的文件,就可以毫无限制的使用 PI 这个常量值

理由3 #define 无法在命名空间中使用,C++ 多人配合开发中通过使用命名空间能够有效避免很多重名问题

2. 常量修饰

2.1 普通变量名

const int len {10}; //常量不可修改

const int* a;
const int& a;       //这两种都是声明引用或指向的对象值不允许修改

int* const a;       //指针存储的变量地址不可修改,但指向对象的值允许修改 
示例
int b {10};
int c {10};
int* const a{&b};
*a = 13;//允许
a = &c; //不允许

const int* const a; //存储的变量地址和对应的变量值都不允许修改

2.2 对于函数的修饰

const int t() {} //返回常量元素

void test () const {} //正常情况下只能有调用 const 成员函数,且不能修改变变量
//通过使用关键字 mutable 就可以修改变量
struct T {
private:
    int a {10};
    mutable b {10};
public:
    void t1() {
        std::cout << "T1" << std::endl;
    }
    void t2() const {
        std::cout << "T2" << std::endl;
    }
    void t3() const {
        t2(); //是可以的
        t1(); //是无法通过编译的
        a = 13; //是无法编译通过的
        b = 13; //是允许的
    }
}
发布了120 篇原创文章 · 获赞 27 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_24890953/article/details/104093033