我是靠谱客的博主 儒雅背包,这篇文章主要介绍C++中使用const,格式总结,现在分享给大家,希望可以做个参考。

  • 指向常量的指针变量
    • 指向常量的指针变量,只是限制了指针变量,不能改变,它指向的对象的值。
复制代码
1
2
3
4
5
6
7
int a = 1; int b = 2; const int* p = &a; *p = 5;//错误,无法通过p来改变a的值 p = &b;//正确,p的指向可以进行修改 a = 5;//正确
  • 常指针
    • 常指针,指定指针变量的值是常量,指针常量的指向不能改变。
复制代码
1
2
3
4
5
6
7
int a = 1; int b = 2; int* const p = &a; p = &b;//错误 *p = 5;//正确 a = 5;//正确
  • 指向常量的常指针(上面两种作用的叠加)
    • 指针变量指向一个固定的对象,该对象的值不能改变。
复制代码
1
2
3
4
5
6
7
int a = 1; int b = 2; const int* const p =&a; p = &b;//错误 *p = 5;//错误 a = 5;//正确

可见,上面三种方法,只是针对p指针,但,对于a的值,始终是可以直接进行修改的
如果,要真正保证,a的值不能进行修改。

复制代码
1
2
const int a = 1;

在C++中,经常使用const指针 (第一种),保证某些数据,在指针操作的过程中,其值不被改变。

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream> using namespace std; int main(int argc, char const *argv[]) { const int a =1; int* p = (int*)&a;//必须强制类型转化 *p = 5; cout<<*p<<endl; return 0; } 输出:5
  • C++中的 const 更像编译阶段的 #define
    C++ 对 const 的处理少了读取内存的过程,优点是提高了程序执行效率,缺点是不能反映内存的变化,一旦 const 变量被修改,C++ 就不能取得最新的值。
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<iostream> using namespace std; int main(int argc, char const *argv[]) { const int a =1; int* p = (int*)&a; *p = 5; cout<<*p<<endl; cout<<a<<endl; return 0; } 输出: 5 1
复制代码
1
2
3
const int m = 10; int n = m;

变量是要占用内存的,即使被 const 修饰也不例外。m、n 两个变量占用不同的内存,int n = m;表示将 m 的值赋给 n,这个赋值的过程在C和C++中是有区别的。

在C语言中编译器会先到 m 所在的内存取出一份数据,再将这份数据赋给 n;而在C++中,编译器会直接将 10 赋给 m,没有读取内存的过程,和int n = 10;的效果一样。
C++ 中的常量更类似于#define命令,是一个值替换的过程,只不过#define是在预处理阶段替换,而常量是在编译阶段替换。

  • C语言对 const 的处理和普通变量一样,会到内存中读取数据;C++ 对 const 的处理更像是编译时期的#define,是一个值替换的过程。

最后

以上就是儒雅背包最近收集整理的关于C++中使用const,格式总结的全部内容,更多相关C++中使用const内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部