const相关总结

const与基础数据类型

  • 声明基础数据类型常量:
    • const <type> <name>
    • <type> const <name>
  • const关键字一般用来修饰常量,例如我们使用const int MAX=100来声明一个常量,一旦一个常量被声明了以后,对它的修改都将引发错误
  • 我们也可以将const写在类型名后面,这和写在前面等效
  • 一般情况下,常量名为大写

const与对象

  • 声明常对象:
    • const <type> <name>
    • <type> const <name>
  • 常对象的所有数据成员都不能被修改
  • 如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数)。
  • 常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值
  • 只能通过构造函数的参数初始化表对常数据成员进行初始化
  • 常对象可以有非常成员函数,只是不能被常对象所使用

const与指针

常量指针

  • 指针可以被修改,但是不能通过该指针修改指向的内容,所以被指向的数据不能被修改

  • 声明常量指针:

    • const <type> *<name>
    • <type> const *<name>
  • 举例:int x=3;const int *p=&x
    • 此时常量指针p的*p不能修改,而p可以修改
    • p=&y//修改所指向的地址,正确
    • *p=4//修改所指向的内容,错误

指针常量

  • 指针不能被修改,但是可以修改指针指向的内容,即被指向的数据能被修改
  • 声明指针常量:
    • <type>* const <name>
  • 举例:int x=3;int* const p=&x
    • 此时指针常量p的p不能被修改,而*p可以修改
    • p=&y//修改所指向的地址,错误
    • *p=4//修改所指向的内容,正确

常量指针和指针常量的结合

  • 若声明为:const <type>* const <name>,则指针本身和其所指向的数据都不能被修改
  • 举例:int x=3;const int* const p=&x
    • p=&y//修改所指向的地址,错误
    • *p=4//修改所指向的内容,错误

const与引用

注意:引用必须初始化并且永远指向它初始化的对象,不能被再次修改,这点和指针不同

常引用

  • 引用本身不可以被修改,也不能通过引用修改所引用的内容,即引用对象不能被修改
  • 声明常引用:
    • const <type> <name>
    • <type> const <name>
  • 举例:int x=3;const int &y=x
    • x=4//直接通过x修改内容,正确
    • y=4//通过常引用修改内容,错误

const修饰函数

const修饰函数参数

  • const修饰变量时类似,如果const修饰了一个函数的参数,那么这个参数就不能在该函数内部被修改
  • 举例:
void setx(const int a){
  a=3;//尝试修改const修饰的变量,编译出错
}

const修饰成员函数

  • const修饰成员函数实际上是隐含传入的this指针为const指针,所以不能通过const函数修改成员变量
  • const修饰的成员函数不能修改任何成员变量(可以修改mutable修饰的变量)
  • const修饰的成员函数可以修改static修饰的变量,因为static修饰的变量不属于对象,可以全局访问,不需要this指针来修改
  • const成员函数不能调用非const函数,因为该函数可能修改成员变量
  • 举例:
class test{
static int b;
int a;
int testFuction() const//const在函数名后面
  {
    a=3;//错误,不能修改成员变量
    b=4;//正确,可以修改静态数据成员
    testFun1();//错误,不能调用非const函数
    testFun2();//正确,可以调用const函数
  };
int testFun1(){};
int testFun2() const{};
}
int test::b=0;//静态数据成员要在类外初始化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值