您的位置:首页 > 编程语言 > C语言/C++

c++学习笔记之函数重载与const的关系

2012-09-19 16:30 603 查看
函数重载与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);// 会报错,重复声明
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 编译器 c