本文共 1279 字,大约阅读时间需要 4 分钟。
点击上方蓝字关注我,我们一起学编程
欢迎小伙伴们分享、转载、私信、赞赏微信搜索:编程笔记本
微信搜索:编程笔记本 微信搜索:编程笔记本今天带领大家回顾一下 const
的几种用法。
首先介绍两个概念:
- 顶层(top-level)const:指针本身不可改变,但指针指向的值可以改变。
现在我们把几种可能的 const 组合写在下面:
微信搜索:编程笔记本
微信搜索:编程笔记本 微信搜索:编程笔记本int a;const int * p1 = &a;int * const p2 = &a;int const * p3 = &a;const int * const p4 = &a;
现在我们依次来分析每一种情况。
#includeusing namespace std;int main(){ int a = 1; int b = 2; const int * p1 = &a; // 指向的值不可变,底层 int * const p2 = &a; // 指针本身不可变,顶层 int const * p3 = &a; // 指向的值不可变,底层 const int * const p4 = &a; // 均不可变,顶层、底层 /* const int * p1 = &a; */ p1 = &b; // 正确 *p1 = 3; // 错误:assignment of read-only location ‘* p1’ /* int * const p2 = &a; */ p2 = &b; // 错误:assignment of read-only variable ‘p2’ *p2 = 3; // 正确 /* int const * p3 = &a; */ p3 = &b; // 正确 *p3 = 3; // 错误:assignment of read-only location ‘* p3’ /* const int * const p4 = &a; */ p4 = &b; // 错误:assignment of read-only variable ‘p4’ *p4 = 3; // 错误:assignment of read-only location ‘*(const int*)p4’ return 0;}
以上程序段展示出了每一种情况下的 const 是顶层的还是底层的,并给出相应的错误提示。
一个很现实的问题是:**该如何去记忆?**下面我教大家一个简单可行的方法:
以 *
为界,若 const
出现在左侧,则其指向的值不可变;若 const
出现在右侧,则指针本身不可变;若 const
出现在两边,则指针及其指向的值均不可变。
微信搜索:编程笔记本
微信搜索:编程笔记本 微信搜索:编程笔记本