ran*_*111 7 c++ overloading const
函数重载可能发生在具有相同参数数量的两个成员函数之间,如果其中一个成员函数声明为const.
但是如果一个函数有一个const参数,另一个函数具有相同类型的非const参数呢?它适用于引用和指针吗?如果C++提供它,它为什么提供?如果你知道,请与我分享原因.
以下是帮助您理解上述场景的示例.
void fun(const int i)
{
cout << "fun(const int) called ";
}
void fun(int i)
{
cout << "fun(int ) called " ;
}
int main()
{
const int i = 10;
fun(i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:编译器错误: redefinition of 'void fun(int)'
void fun(char *a)
{
cout<<"non-const fun() called";
}
void fun(const char *a)
{
cout<<"const fun() called";
}
int main()
{
const char *ptr = "GeeksforGeeks";
fun(ptr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:const fun()调用
为什么在C++中允许第二个?
Xeo*_*Xeo 10
第一个参数是顶级 参数const.这意味着函数不能更改参数的值,但调用者并不关心:被调用者获取参数的副本,因此如果参数具有顶级 const,则它是实现细节.请注意以下工作:
void f(int); // forward declare
void g(){ f(42); }
void f(int const i){ /*...*/ } // define above declared function
Run Code Online (Sandbox Code Playgroud)
对于第二组重载,它const不再是顶级的.它描述被调用者是否可以更改指针指向的内容.作为来电者,您确实关心这一点.它不仅仅是一个实现细节了.