C++ const详解

谁说胖子不能爱 提交于 2021-01-02 05:27:43

  常量在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后面的变量是不能当左值的。

往期文章:


FPGA相关:



其他:




FPGA时序约束教程:

  1. FPGA时序约束理论篇之建立保持时间

  2. FPGA时序约束理论篇之时序路径与时序模型

   3. FPGA时序约束理论篇之IO约束

   4. FPGA时序约束理论篇之时钟周期约束

   5. FPGA时序约束理论篇之两种时序例外

   6. FPGA时序约束理论篇之xdc约束优先级

   7. FPGA时序约束实战篇之梳理时钟树

   8. FPGA时序约束实战篇之主时钟约束

   9. FPGA时序约束实战篇之衍生时钟约束

  10. FPGA时序约束实战篇之延迟约束

  11. FPGA时序约束实战篇之伪路径约束

  12. FPGA时序约束实战篇之多周期路径约束

  13. Vivado时序约束辅助工具

  14. FPGA时序约束之Tcl命令的对象及属性


欢迎关注微信公众号:


加FPGA技术交流群的朋友,请加微信:xhclsys2


本文分享自微信公众号 - 科学计算Tech(Quant_Times)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!