【c++】c++常见关键词const、static、extern、explicit含义

c++里有几个常见的关键词,比如const、static、extern、explicit,这里就简单介绍下每个关键词的含义以及使用场景。

const

const相对来说还是比较简单易懂的,就是被修饰的定义是为常量,整个程序运行期间无法改变。常见的面试或者开发过程中会遇到,有三个点需要注意:
1、const和指针结合起来使用

  • 常量指针 const int* val 被指向的对象是常量,即该指针所指向的值val,整个生命周期无法改变。
  • 指针常量,int* const val 该指针本身是常量,即指针位置无法被修改。

这俩个有点绕,比较好理解的是:
*前面的是对指向对象的描述,*后面的是对指针本身的描述

2、const定义内容初始化
一般是定义的时候就被初始化,或者在构造函数的初始化列表中被赋值初始化。这里就会有个疑问,为何需要在初始化列表里对const进行初始化那?这就牵涉到初始化列表和构造函数的之间的关系了。
初始化列表是对类成员变量进行创建并初始化,然后再进入构造函数体,对需要的变量进行再一次赋值操作。从这可以看出,进入构造函数体之前,类的所有变量已经被创建而且初始化了。对于const类型变量来说,初始化之后不能进行修改,所以只能在初始化列表中即进行初始化并同时执行赋值操作。
参考地址:https://stackoverflow.com/a/4037283

3、const修饰函数
const修饰的函数表示该函数体内无法修改,任何类成员的内容。对于一个const的对象,只可以访问const修饰的函数;但对于非cosnt对象,则什么函数都可以调用
const修饰的函数内部只能调用const修饰的函数,是因为避免调用的非const修饰的函数修改了类成员变量。

extern

对于extern,是需要使用在具有全局的变量或者函数上。经常被使用到的有俩种:
1、extern “C”。这种一般也会修饰在函数或者代码块上。表示被修饰的部分采用c风格的编译处理。这个比较好理解。
2、针对变量或者函数。在说明之前,需要提前介绍一下外部链接性(可以理解全局变量),so介绍的比较容易明白(传送门 )。
对于函数,其默认带有外部链接性。比如在平时开发中,通过引用某个头文件,就可以使用其中的函数。那对于变量类型,如何使其具有外部链接性,就是如何在其他模块可以发现该变量。对于非const类型的变量,其默认具有外部链接性;对于const修饰的变量(非类成员中),这个时候就需要使用extern关键词。
针对这种变量,除了其被定义的地方,其他地方使用的时候都需要加上extern关键词,一般是结合前向声明一起使用。
其实这里是有个小技巧的,就是如何比较好的定义全局变量(当然在平时的开发中,不建议定义全局变量)。推荐的做法就是 在cpp中声明和定义全局变量,然后通过extern关键词在头文件中声明。其他文件通过引用头文件的方式,使用该全局变量。
在这里插入图片描述

static

提到static静态变量,就离不开对于一个进程来讲的内存分布,如下图所示。详细内容可以直接看原文:https://www.geeksforgeeks.org/memory-layout-of-c-program/
在这里插入图片描述
对于static来说,一般有如下俩种用途:

  • 应用到变量上,可以应用到一个函数内局部变量,也可以是一个类里面的成员变量;
  • 应用到函数上;

1、应用到变量上

  • 当应用在函数内部变量的时候,它会一直生存到程序退出,而且所有对象都可见
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值