现在的位置: 首页 > 综合 > 正文

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

2017年12月20日 ⁄ 综合 ⁄ 共 747字 ⁄ 字号 评论关闭

函数重载与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);// 会报错,重复声明

抱歉!评论已关闭.