const 关键字 总结

用于c++类中的成员函数以及成员变量

  • 常成员函数

   1.常成员函数通常是把const关键字放在函数名的后面,例子

class A{
public:
   int getNum() const {};  
};

   2. 常成员函数不能修改数据成员的值,为什么呢?

//我们常规的写法
class A{
public:
   int changeNum()  {
    _a = 10;
    };  
private:
   int _a; 
};

//其本质其实是这样的
class A{
public:
   int changeNum(A* this)  {
    this->_a = 10;
    };  
private:
   int _a; 
};

//当成员函数是常成员函数时

class A{
public:
   int changeNum(A* const this) const {
    this->_a = 10;
    };  
private:
   int _a; 
};
//他可以等价于

class A{
public:
   int changeNum(const  A* const this) {
    this->_a = 10;
    };  
private:
   int _a; 
};
//所以此处 this变成了常指针,不能改变其值

   3. 要调用常成员函数,需要先新建常对象,常对象只能调用常成员函数。(参考https://www.jb51.net/article/84409.htm)

        4. 普通对象可以调用全部成员函数。

  • 常成员变量

  1. 常成员变量只能通过初始化列表进行初始化,不能再构造函数体中进行初始化。

 用于c++常规的数据类型

const 与基本数据类型

int a = 3;// a可以改变
const int b =4;//b不可以改变

const 与指针类型

扫描二维码关注公众号,回复: 3202394 查看本文章
//下述两个申明完全等价
const int * p = NULL ;
int const *p  = NULL  ;

// 但是与下面这个有区别
int* const p = NULL ;

//下述两个申明完全等价
const int* const p = NULL;
int const* const p = NULL;

//const int *p  可以理解为 const(int *p) 也就是说 *p的值不能改变
//int * const p 可以理解为 int* (const p)也就是p的值不能被改变
//int const* const p 这种情况*p和p的值都不能被改变

const与引用

//此时将不能通过给y赋值来改变x
int x =3; const int &y = x;
//下面给出几种常见的错误表述
const int x = 3; x=5;

int x = 3; const int y = x; y =5;

int x = 3; const int *y = &x; *y = 5;

int * const y = &x; y = &z;

const int x = 3; const int & y = x; y = 5;

const int x = 3; int *y = &x;

//下面的是正确的
int x= 3; const int *y = &x;

猜你喜欢

转载自www.cnblogs.com/geooeg/p/9650337.html
今日推荐