C++ const详解

  常量在C++中经常用到,用关键字const表示,它是常数变量,也就是说,它仍然是变量,而不是常数。什么区别呢?编译器会为变量在内存中分配地址空间,而常数是编译器在编译过程中记录在内存表里一个实体。

  • 常量定义
const int a = 10;

在定义完之后,就不能再修改常量a的值了。如果是在不同的文件中使用,需要用到关键字extern

extern const int a ;

这样表示变量a是一个定义别处的全局变量,在这里只能使用,并不能修改,但a并不一定真的是一个const

指针常量常量指针   这应该是C++面试和笔试中经常考到的一个知识点。

  • 指针常量
int *const q = 10;  // q is const
*q = 20;    // OK
q++;        // ERROR

指针常量,在上面的代码中,q是常量,指向的地址是不能变化的,但指向地址中的内容是可以改变的。

  • 常量指针
int a = 10;
int b = 20;
const int *p = &a;      // *p is const
*p = 15;                // ERROR 
a = 30;                 // OK
p = &b;                 // OK

常量指针,在上面的例子中,(p)是常量,我们不能通过(p)来改变指向的对象即a;但a本身是可以改变的,而且p也是可以指向别处的。

有什么好办法容易区分这两个呢?可以看const*的先后顺序:

const int *p;  //常量指针
int *const p; // 指针常量

而且只要我们记住,const后面的是常量,这样就很容易区分它们的功能,对于常量指针*p都在const后面,所以*p是个常量,直接对*p赋值的操作肯定是错误的;而指针常量,只有pconst后面,所以p是常量,指针指向地址是不能变的,但指向地址里面的内容是可以变的。

函数参数中的常量 如果函数的参数中有常量,那么在函数中,该参数是不能被修改的

int func(const int i){
    i++;  // ERROR
}

函数返回值为常量

int f1() {return 1;}
const int f2() {return 1;}
int main(){
    const int k = f1();     // OK
    int n = f2();              // OK
}

所以,对于const变量,我们可以要记住一个核心的一点是,const后面的变量是不能当左值的。

本文分享自微信公众号 - 科学计算technomania(Quant_Times),作者:猫叔

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GPU并行计算之向量和

    所有的CUDA API返回值都是CUDA中定义的一个错误代码,这种返回值的方式也是我们在写程序中经常用到的。这也意味着我们如果想得到某个结果,只能通过参数引用的...

    猫叔Rex
  • 12 Julia科学计算

    跟Python中的pandas的用法很像,相信用过Pandas的朋友上手应该无压力

    猫叔Rex
  • PYNQ 经典项目分享之 - Hello World

    此项目解释了如何在FPGA上使用resizer IP来调整图像的大小。其中对比了两种图像大小调整的解决方案的运算速度,其中之一为使用Python I...

    猫叔Rex
  • const用法小结

    常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。因此,定义或说明常类型时必须进行初始化。 概述 1. const有什么...

    猿人谷
  • HTTP代理的应用场景

    很多爬虫工作者都知道,爬虫工作的进行离不开HTTP代理IP的支持。除了网络爬虫,那么HTTP代理IP适合于那些应用环境呢?

    用户6172015
  • 如何伪装本地IP

    我们通过互联网上网的的时候,浏览各大网站时,个人信息随时都有可能被泄露,信息泄露都是悄无声息的发生,不会被用户发现。一旦发现我们自己的的信息被泄露的时候,说明肯...

    用户6172015
  • 实战 | 一不小心创造了新的编程语言!

    鱼皮平时会写一些有趣的小项目练练手。谁知道,前段时间,一不小心创造了一门新的编程语言!

    程序员鱼皮
  • Linux知识之启动外部应用方法

    一般启动外部应用的方法有system,exec与popen。它们功能相似但使用上有所差别。

    Qt君
  • 归并排序

    #include<stdio.h> void MergeArray(int first,int mid,int last,int a[]) { int...

    用户1624346
  • 杭电5178 (二分练习!)

    pairs John has n points on the X axis, and their coordinates are (x[i],0),(i=0,...

    杨鹏伟

扫码关注云+社区

领取腾讯云代金券