前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ const详解

C++ const详解

作者头像
猫叔Rex
发布2020-06-29 15:13:03
6350
发布2020-06-29 15:13:03
举报
文章被收录于专栏:科学计算

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

  • 常量定义
代码语言:javascript
复制
const int a = 10;

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

代码语言:javascript
复制
extern const int a ;

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

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

  • 指针常量
代码语言:javascript
复制
int *const q = 10;  // q is const
*q = 20;    // OK
q++;        // ERROR

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

  • 常量指针
代码语言:javascript
复制
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*的先后顺序:

代码语言:javascript
复制
const int *p;  //常量指针
int *const p; // 指针常量

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

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

代码语言:javascript
复制
int func(const int i){
    i++;  // ERROR
}

函数返回值为常量

代码语言:javascript
复制
int f1() {return 1;}
const int f2() {return 1;}
int main(){
    const int k = f1();     // OK
    int n = f2();              // OK
}

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 傅里叶的猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档