C++关于参数为const引用类型的函数调用参数成员函数的一个问题

2014-11-24 13:51:36 · 作者: · 浏览: 3

刚才遇到这么一个问题:


class Base
{
public:
Base(int b):a(b){}
void getMem()
{
cout << "Base = " << a << endl;
}



};


void MemFcn(const Base& item)
{
item.getMem();
}



当我把一个Base对象引用传递给MemFcn函数时,报错|error: passing ‘const Base’ as ‘this’ argument of ‘void Base::getMem()’ discards qualifiers


思考了一会,想到原来虽然传递的参数为const 引用,但是在函数体里面又调用了另一个函数,而这个函数(即getMem)可能会改变item的值,这与item声明为const是相互矛盾的。因此需要将getMem函数声明为const,以保证不会修改item的值。


所以应修改为:



class Base
{
public:
Base(int b):a(b){}
void getMem() const
{
cout << "Base = " << a << endl;
}



};


void MemFcn(const Base& item)
{
item.getMem();
}