函数重载可以发生在两个具有相同数量参数的成员函数之间,如果其中一个被声明为 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;
}
输出:编译器错误:'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;
}
输出:调用 const fun()
为什么在 C++ 中允许使用第二个?
最佳答案
第一个的参数是顶级 const
。这意味着该函数无法更改参数的值,但是,调用者并不关心:被调用者获得参数的拷贝,因此如果参数具有顶级 const
,它是一个实现细节。请注意以下工作:
void f(int); // forward declare
void g(){ f(42); }
void f(int const i){ /*...*/ } // define above declared function
对于第二组重载,const
不再是顶级。它描述了被调用者是否可以改变指针指向的地方。作为来电者,您确实关心这一点。它不再只是一个实现细节。
关于c++ - 使用 const 参数的函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12696121/