C++ 修饰符const、static、extern、ref、volatile、explicit总结

本文详细介绍了C++中的const、ref(左值引用和右值引用)、static、extern、volatile以及explicit等修饰符的用法和实践。通过实例展示了它们在修饰变量、函数、类成员等方面的作用,同时提到了右值引用在C++11中的引入。此外,还简要提到了enum、auto、decltype、regex和constexpr等概念。
摘要由CSDN通过智能技术生成

C++里面有不少知识点是与其本身的关键字紧密结合的。本文即讲到了常用的const、static、ref、enum,也会介绍一些不太常用或者一些较新的关键词:extern、volatile、auto、decltype、constexpr、explicit,最后再附带介绍了一下C++正则regex方面的知识。这里注意ref包括左值引用、右值引用两大部分,其中右值引用一般较少见。


目录:

const

const是constant的缩写,顾名思义——常量。

在商业化编程中,熟练使用const是一门必要的基本功。它的主要使用场景有两大部分,

  1. 修饰变量或者参数,使其达到某个常量目的;
  2. 与类相结合。

修饰变量

一种最普遍是使用方式,const修饰变量,这样将无法再次修改该变量的值。

int const a = 1;
//a = 10; //error

然而,最恼火的是指针的出现,伴随着一串const与pointer的结合。心中一万只野马在奔腾。

const int* c_ptr = &c;
int const* c_ptr2 = &c;
int* const c_ptr3 = &c;
const int const* c_ptr4 = &c;//warning C4114
const int* const c_ptr5 = &c;

初次见到上面这4行代码。如果不是对const十分熟悉的话,十有八九会搞晕。针对这种情况,极为有必要实践并做处相关的笔记。

首先,准备了几个备用变量。

int const a = 1;
int const b = 2;
int c = 10, d = 20;

接下来,就陆续给出实践结果。

实践1: const int* c_ptr = &c;

const int* c_ptr = &c;
//*c_ptr = 11; //error
c_ptr = &d;

结果:*c_ptr 值是常量,c_ptr指针可以修改。

实践2:int const* c_ptr2 = &c;

int const* c_ptr2 = &c;
//*c_ptr2 = 12; //error
c_ptr2 = &d;

结果:*c_ptr 2值是常量,c_ptr2指针可以修改。(也就是说实践1与实践2,两种写法是一样的效果),那么,继续看….

实践3:int* const c_ptr3 = &c;

int* const c_ptr3 = &c;
//c_ptr3 = &d; //error
*c_ptr3 = 13;

结果:c_ptr3指针是常量,*c_ptr3值是可以修改的。(同以上2种实践结果恰好相反)。继续…

实践4:const int const* c_ptr4 = &c; //warning C4114

const int const* c_ptr4 = &c;//warning C4114: 多次使用同一类型限定符
//*c_ptr4 = 14; //error
c_ptr4 = &d;

结果:*c_ptr 4值是常量,c_ptr4指针可以修改。该写法被给予了警告:warning C4114: 多次使用同一类型限定符,同时也可以看出这种写法的效果和实践1、2是一致的,直接使用实践1或者2的写法就完全可以,并且不会出现警告。

实践5:const int* const c_ptr5 = &c;

const int* const c_ptr5 = &c;
//*c_ptr5 = 15; //error
//c_ptr5 = &d;  //error

结果:*c_ptr 5值是常量,c_ptr5指针也是常量。这种修饰方式十分稳定,任何内容都是无法修改的。

小结:观察了这5组实践,很快就得出结论了。去掉类型,一眼就能知道谁是常量、谁是可以修改的。举个栗子吧,
e.g.

const int* const c_ptr5 = &c;

去掉类型,

const * const c_ptr5 = &c;

第一个const后面修饰的是 *c_ptr5;第二个const修饰的则直接是c_ptr5。如此下来,就将整个内容全部表示为常量了。以此类推,相信很容易解释其他几个实践了。

与类结合

与类结合之后,可能会面临两个问题,

  1. 修饰某个函数&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值