C++雾胸腺癌脑膜瘤景3:const用法的总计

const作为C与C++共有的第壹字,很多行使的办法宣城小异。但由于C++是一门面向对象的言语,在类和指标中有越多的利用规则。在此以前学习C语言的时候就被const那一个重中之重字搅得焦头烂额,正巧也借那篇小说做个完整的计算。

函数参数修饰

此地最重要正是应用在地方传递上,在值传递的参数情状下,const没有意思。通过地点传递升高功用,同时选取const关键字来保障传递的始末不被修改。

void Fun(const A *arg);                //修饰指针型传入参数
void Fun(const A &arg);                //修饰引用型传入参数

类之中的const关键字

那部分剧情是C++与C语言不相同的一部分,Const关键字对类之中的变量与函数都得以修饰,又涉嫌到前边种类文章反复提到的权杖决定,相当于包裹的内容。

  • const成员变量
    其一const关键字在修饰成员变量时,与上文提及的行使相同,const变量在开始化列表中赋值,并且无法拓展改动。

    class object
    { 
        …
        const int value;         //const变量不能被修改 (int const value也可以)
        …
        object (int x): value(x) { } ; //构造函数初始化const变量
     } 
    
  • const成员函数
    const成员函数是让作者最感兴趣的编制程序逻辑,不难的话,那是贰个带函数式编制程序逻辑的一种采纳办法。一言以蔽之,const修饰的积极分子函数没有副作用,无法修改对象的积极分子内容,假设急需修改,就须求生成新的指标。

    class object
    { 
        …
        int value;        
        …
        void test() const {
                value = 20; //编译错误,const函数不能修改对象之中的成员变量,也不能调用其他非const函数。
        } 
    
  • const对象
    const关键字能够在对象起始化时候作为修饰,const关键字修饰的目的称之为常量对象。常量对象具备成员暗中同意添加了const修饰字,也正是独具的积极分子变量都不可能举行修改。大家得以认为是倒闭了写权限,所以const对象只可以调用const成员函数,非const成员函数都有涂改成员变量的权杖。

    class object
    { 
        …
        int value;        
        …
        void test() const {
        } 
    
       int main() {
        const object obj;  
      }
    

3.非C++语言是怎么化解常量难题的:

  • Java
    final修饰符
  • 修饰变量时与const关键字效果一样;
  • 修饰函数或类时,代表子类无法override的子类不能够继承;

  • Scala

  • var 修饰符代表变量。
  • val 修饰符代表常量。

  • Python
    老子他喵的从未有过常量,全靠大写字母自觉。
    (任性自由的Python~~)

  • Golang

C语言的同胞,const关键字与C与C++基本区别十分小,读者能够之行计算。

1.const关键字:

const第③字,翻译成汉语是常量,常数的情致。所以在多数场地之中,const是来定义常量的,定义常量也是好的编制程序习惯。在C类语言之中,定义常量平日会动用宏定义或const关键字来定义常量。二者的区分就在于:

  • 1.宏定义是在预编译等级实行文本替换,而const是在编译等级举办代码的语义约束。
  • 2.由于两者所生效的级差分化,所以可以起的职能也不及。const常量具有现实性的档次,会在编写翻译阶段实行项目检查,发生的代码鲜明会越加安全。(当然宏定义会尤其灵敏,能够定义代码或字符串,绝对来讲假使要进行大气的宏替换,预编写翻译时间会更长。)
  • 3.宏概念很多时候是进展给当下数,数次交替须要频仍分配内部存款和储蓄器,而const可以因而全局的符号表,仅保留一份copy就完成了。

2.const的用法:

地点说了const的好多好处,接下去大家完全的梳理一下const关键字的用法:

####修饰变量
起码用法比较不难,作为二个修饰符加在变量从前就足以定义1个常量了。

const int Pi = 3.1415926;
int const Pi = 3.1415926;

那边需求强调一下,所谓的常量只是命名符对内存空间的指向被绑定,内部存款和储蓄器空间上的剧情实在不是常量,仍然能够被涂改。(好拗口,妈的怎么着看头嘛~~看代码吧)

const int Pi = 3.1415926;
int const Pi = 3.1415926;

####修饰指针
其一用法就比较蛋疼了,需求记住const关键字在变量类型定义时的先后顺序。

const int* x = &y;                  //变量的指向内容不能做修改
int* const x  = &y;                 //指针指向的地址不能做修改
const int* const x  = &y;           //两者都不能做修改

我们不难记住1个口诀吧:“前限域,后限针。”

####修饰引用
这一个用法和指针类似,把*号换来&就行了,那里就不赘述了。