关于网友提出的“ const修饰形参可导致重载否?”问题疑问,本网通过在网上对“ const修饰形参可导致重载否?”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: const修饰形参可导致重载否?
描述: void chl(int x );
void chl(const int x );
void chl(int x ){ }
void chl(const int x ){ }
error C2084: 函数“void chl(int)”已有主体
void chl(int* x );
void chl(const int* x );
void chl(int* x ){ }
void chl(const int* x ){ }可以
解决方案1: 不可以,编译器重载的时候不考虑最外层const修饰符
注:int*对应的const版本是int*const。int*和const int*是可以重载的
解决方案2:
对于参数上面说的很清楚了
const一般的作为返回是可以的,还有函数后面的补充也是可以的
解决方案3:void chl(int x){}
//void chl(const int x){} //重定义
void chl(int* x){ } //重载
void chl(const int* x){ } //重载
//void chl(int* const x){} //重定义
void chl(int &x){} //重载
void chl(const int& x){} //重载
当然,你不能同时把上面的函数都定义上,那样调用的时候会二义的,但这跟重载已经无关了。
解决方案4: 对于值传递的,由于函数里无法改变形参,加不加const没意义,也就不能形成重载。
但对于引用和指针就不一样了,加不加const是不一样的意思,可以导致重载。
注意指针是指指向目标const,不是指针本身const。指针本身const,还是值传递,也不能重载。
解决方案5: const修饰形参是可以做重载的,但对于值传递的不行。
以上介绍了“ const修饰形参可导致重载否?”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2297913.html