函数重载与const的关系:
1、如果形参是非引用类型的,则下面两个函数是编译报错的(error C2084: 函数“void rldFunction(int)”已有主体)
void rldFunction(int paraIn)
{
cout << paraIn << endl;
}
void rldFunction(const int paraIn)
{
cout << paraIn << endl;
}
2、如果形参是引用类型的,则下面的函数是可以重载的,
void refRldFunction(const int & para)
{
cout << "para:" << para << endl;
}
void refRldFunction(int & paraRef)
{
cout << "paraRef:" << paraRef << endl;
}
那么调用时候(refRldFunction(num))会调用哪一个呢?这得看实参的类型了:
For example ,如果实参是const int num; 很明显只能调用第一个函数。如果实参是int num;编译器一般会按照非const对象精确匹配的原则调用第二个。
为什么会这样?其实个人理解还是参数传递的事,非引用形参往函数中传递的是num的副本(就是复制品,并不是真正的num),那么函数是根本不可能修改真正的num的,也就是说加不加const对编译器没区别,那就会报错。而引用型的形参就不同了啊,它是把真正的实参传递给了函数的呢,当然加const 与 不加const 就有很大区别了!!!
题外话:
1、对指针形参的相关处理类似引用。
2、区别“指向const对象的指针” 与 “const 指针”,后者指的是指针本身是const类型的:
pntRldFunction(int *);
pntRldFunction(int *const);// 会报错,重复声明