测试目的:函数在加入const属性后,调用会受到什么限制
测试环境 code::blocks 10.05,Gcc编译器
1,成员函数与const
class a
{
public:
void l_or_r ()
{
cout<<"i am non const"<<endl;
}
void l_or_r() const
{
cout<<"i am const"<<endl;
}
};
int main()
{
a a1;
a1.l_or_r();
const a a2 = a1;
a2.l_or_r();
}
运行结果:i am non const
i am const
const对象只能调用const接口,因为它不希望对自身有改动操作,如果类中没有定义const接口,会引发编译错误。
非const对象对调用时优先匹配非const接口,如果没有非const接口,会采用const接口。
2,全局函数与const
void l_or_r(a&)
{
cout<<"i am non const"<<endl;
}
void l_or_r(const a&)
{
cout<<"i am const"<<endl;
}
int main()
{
a a1;
l_or_r(a1);
const a a2 = a1;
l_or_r(a2);
}
运行结果:i am no const
i am const
全局函数调用原则:以与函数声明中接受参数类型最大的相似度进行调用,如果不能进行精确匹配,可以接受参数从非const到const的转化