使用const参数重载函数

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不再是顶级的.它描述被调用者是否可以更改指针指向的内容.作为来电者,您确实关心这一点.它不仅仅是一个实现细节了.

  • 值得注意的是,对第3个函数是`void fun(char*const a)` (2认同)