刚才遇到这么一个问题:
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();
}