C++中使用const,格式总结

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

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

const int a = 1;

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

#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++ 就不能取得最新的值。
#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
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,是一个值替换的过程。
发布了30 篇原创文章 · 获赞 5 · 访问量 2206

猜你喜欢

转载自blog.csdn.net/weixin_44408476/article/details/105192472