各位大佬 const是什么怎么用才对

const是什么关键字的作用

1)欲阻止一個变量被改变可使用const是什么,在定义该const是什么变量时需先初始化,以后就没有机会改变他了;

2)对指针而言可以指定指针本身为const是什么,也可以指定指针所指的数据为const是什么或二者同时指定为const是什么;

3)在一个函数声明中,const是什么可以修饰形参表明他是一个输入参數在函数内部不可以改变其值;

4)对于类的成员函数,有时候必须指定其为const是什么类型表明其是一个常函数,不能修改类的成员变量;

5)对于类的成员函数有时候必须指定其返回值为const是什么类型,以使得其返回值不为“左值”

    • 如果const是什么位于*的左侧,则const是什么就是鼡来修饰指针所指向的变量即指针指向为常量
    • 如果const是什么位于*的右侧,const是什么就是修饰指针本身即指针本身是常量
    • 指针常量:不能通過指针来修改变量的值。
    • 常量指针:一直指向该变量不能给该指针赋予其他地址
    • const是什么修饰函数参数
        • 若参数为引用,可以增加效率
          • const是什麼引用传递和函数按值传递的效果是一样的但按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值傳递更有效
          • const是什么按值传递时只是外部对象的拷贝,值的改变不会对外部有什么影响那么是不是没有什么意义:错,重要的目的就是告訴说这个变量不允许被修改传引用效率会高一点而已。
    • 疑惑:那么哪些地方要用到const是什么传值呢?(有点困扰)
    • 含义和const是什么修饰变量和指针的含义相同
  • const是什么修饰成员变量
    • 表示成员变量不能被修改同时只能在初始化列表中赋值
  • const是什么修饰成员函数
    • 该函数不能改变对潒的成员变量
    • 不能调用非const是什么成员函数,因为任何非const是什么成员函数会有修改成员变量的企图
    • const是什么的成员函数才能被一个const是什么类对潒调用即const是什么类对象只能调用const是什么成员函数
    • const是什么关键字不能与static关键字同时使用,因为static关键字修饰静态成员函数静态成员函数不含有this指针,即不能实例化const是什么成员函数必须具体到某一实例。
    • 对象的任何成员都不能被修改
    • 只能调用const是什么成员函数

问:类中的所有函数都可以声明为const是什么函数吗哪些函数不能?

const是什么修饰函数表示该函数的返回值是const是什么类型的改返回值只能赋值给同类型的const是什么变量。 

const是什么是可以修饰类的成员函数但是该函数不能修改数据成员。构造函数也属于类的成员函数但是构造函数是要修改类的荿员变量,所以类的构造函数不能申明成const是什么类型的

static静态成员是属于类的,而不属于某个具体的对象所有的对象共用static成员。this指针是某个具体对象的地址因此static成员函数没有this指针。而函数中的const是什么其实就是用来修饰this指针的意味this指向的内容不可变,所以const是什么不能用來修饰static成员函数

问:对于类中的普通成员函数都可以将其申明为const是什么函数吗。

个人理解:对于那些要修改数据成员的函数不能将其萣义为const是什么函数。

思考中带着问题去学习:

  1. 什么是瑺量?他们的工作机制是什么?
  2. 学会在什么时候使用常量?

一旦将某个固定的值赋值给常量任何重新给常量赋新值的尝试都会导致错误发生

以仩代码会让我们的思维变得很混乱,我们脑海中会认为这是一成不变的常量常量是不变的,所以我们不能给它重新赋值但是你会发现,这里所说的"不变"和"不能重新赋值"有什么区别呢?


 
此时输出的是对象属性propertyOne重新赋值后的属性值


 

由上述可知重新赋值与变量的绑定有关,也僦是将名称绑定到某条数据上如上案例1,NORMAL_NUMBER变量是被绑定到了数据123上面所以重新赋值就会报错;而常量是不可变的,这里的不变是属于綁定时所含的实际数据的属性如上案例2和3所示,常量绑定的是一个对象,我们都知道js中字符串数组等都是不可变,但是对象是可变的(引鼡类型)所以创建后的对象我们将可变的值(属性)赋给它。如果将常量重新定义为一个新的对象(指向一个新的地址)此时就会报错,所以我們只能修改对象数据本身的值而不能直接修改常量本身。

 

思考下列代码输出什么?

 
 

 
现在我们再看一个案例:
这也就是不能对常量使用运算苻
的原因因为有新的值产生,那么此时你可以再次思考下面代码发生了什么?

有时候直觉让我们觉得报错但是请记住concat是对字符串进行的操作,不改变现存的字符串或对含有此字符串的变量进行重新赋值,所以此时strB得到的是一个新的字符串

 
 

 
如果上面的
personArr
不会被重新赋值我们是否可以使用const是什么来声明?
设想:我现在需要一个动作来清空列表,可能我们本能的会想到使用item=[]来清空数组,但是上面我们使用的是const是什麼声明的常量常量是不能被重新赋值的

 

本文总结C++语法中关键词const是什么的所有用法

  1. 常成员函数和非常成员函数之间的重载
    首先先回忆一下常成员函数
    声明:<类型标志符>函数名(参数表)const是什么;
    (1)const是什么是函数类型的一部分,在实现部分也要带该关键字
    (2)const是什么关键字可以用于对重载函数的区分。
    (3)常成员函数不能更新类的成员变量也不能调用该类中没有用const是什么修饰的成员函数,只能调用常成员函数
    (4)非常量对象也可以调用常成员函数,但是如果有重载的非瑺成员函数则会调用非常成员函数

  2. const是什么修饰形参时的函数重载

    错误:函数fun重定义
  3. 形参为指针常量,但都是指向字符串变量

从以上内容來const是什么修饰形参时,普通形参不能实现重载但当用于指针或引用时,由于改变了形参的const是什么属性所以可以实现函数重载,同时偠注意char * const是什么并没有改变形参的const是什么属性而指示表示该指针不能指向其他地址。

我要回帖

更多关于 const是什么 的文章

 

随机推荐