我是靠谱客的博主 不安小熊猫,最近开发中收集的这篇文章主要介绍C++类的const成员函数与成员变量,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本篇博文是C++中的const成员函数(函数声明后加const,或称常量成员函数)用法详解:

const成员函数与mutable变量

const成员函数能够被const常量对象调用,而且const常量也只能调用const成员函数,所以即使一个函数没有修改对象值的行为,如果没有加上const限定符说明是常函数,那么const对象(包括const引用)依然不能调用它。
例如:

struct Object {
  int id = 0;

  int GetId()
  {
    return id;
  }
};

int main(int argc, char** argv)
{
  Object obj;
  const Object obj_const = obj;
  obj_const.GetId();
}

上述例子会报错:

error: passing ‘const Object’ as ‘this’ argument discards qualifiers [-fpermissive]
   obj_const.Increase();

然而,有些时候,我们却必须要让const函数具有修改某个成员数据值的能力。比如一些内部的状态量,对外部用户无所谓,但是对整个对象的运行却大有用处,如支持缓存的技术。遇到这种问题,我们可以把一个成员数据定义为mutable(多变的),它表示这个成员变量可以被const成员函数修改却被允许

const成员函数能够被非const对象调用,非const对象在类中没定义有非const成员函数时则调用const成员函数,否则优先调用非const成员函数。
从上面描述来看,一般情况下,我们只需要根据实际情况(指该函数确实是不修改成员变量),只提供const类型的函数即可,因为const成员函数当对象为const对象和非const对象的时候都可以调用const成员函数

同时为类定义const和非const成员函数

为什么类的成员函数中会出现两个实现相同的函数,但是其中一个是const类型,一个不是const类型?
类的定义中,在返回引用类型时,则最好设计两个相同的函数,一个为const,一个为非const类型,并且一个返回const引用,一个返回非const引用:
https://www.zhihu.com/question/56595528?from=profile_question_card
http://blog.csdn.net/ly131420/article/details/51823551

struct Object {
  int id = 0;
  const int& GetId() const
  {
    cout<<"const"<<endl;
    return id;
  }

  int& GetId()
  {
    return id;
  }
};

值得注意的是,把一个成员函数声明为const可以保证这个成员函数不修改数据成员,但是,如果据成员是指针,则const成员函数并不能保证不修改指针指向的对象,编译器不会把这种修改检测为错误。
http://blog.csdn.net/lihao21/article/details/8634876

const在函数名前和函数后的区别

参考:http://blog.csdn.net/zhou199019901990/article/details/38553227

【参考】:
1、http://blog.csdn.net/GMstart/article/details/7046140

最后

以上就是不安小熊猫为你收集整理的C++类的const成员函数与成员变量的全部内容,希望文章能够帮你解决C++类的const成员函数与成员变量所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部