C++中const在函数名前面和函数后面的区别

一、概念

  当const在函数名前面的时候修饰的是函数返回值,在函数名后面表示是常成员函数,该函数不能修改对象内的任何成员,只能发生读操作,不能发生写操作。

二、原理:

  我们都知道在调用成员函数的时候编译器会将对象自身的地址作为隐藏参数传递给函数,在const成员函数中,既不能改变this所指向的对象,也不能改变this所保存的地址,this的类型是一个指向const类型对象的const指针。

具体示例:

一个函数名字后有const,这个函数必定是成员函数,也就是说普通函数后面不能有const修饰,如:int print( ) const {.......} 这个函数必定为成员函数,即在类里面定义的函数。

    在一个类里定义了一个const成员函数后,则此函数不能修改类中的成员变量,如果定义了一个类的const对象(非const对象可以调用const成员函数和非const成员hanshu ),它只能调用类中的const成员函数,如:

class text{

        public:

               void print_const(void) const   { cout<<"hello"<<endl;}          //有const修饰

              void print(void) {cout<<"hello"<<endl;}            //没有const修饰

             void getk(void)  const  {k=5; }          //错误,有const修饰,不能修改k的值,

      private:

             int k;

};

const text a;

int main()

{

            a.print();           //错误,const对象只能调用

           a.printf_const();   //正确

}

// void print() const {}  和 void print() {}   是重载函数,假如对象为const,则调用void print () const成员函数,如果为非const,则调用void print() ;

class text{
public:
 void print(void) const {cout<<"hello_const"<<endl;}
 void print(void) {cout<<"hello"<<endl;}

};

const text a;      
int main()
{
 a.print();    //屏幕输出 hello_const  假如对象a 定义为 text a,则输出 hello
 return 0;
}

原文:https://blog.csdn.net/zhou199019901990/article/details/38553227

猜你喜欢

转载自blog.csdn.net/yuhan61659/article/details/81585184
今日推荐