c++ - 使用 const 参数的函数重载

标签 c++ constants overloading

函数重载可以发生在两个具有相同数量参数的成员函数之间,如果其中一个被声明为 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/

相关文章:

c++ - 当方法覆盖并省略 const 时,gcc 编译器不显示警告

c++ - 为什么 syslog 有两个不同的函数声明?

c++ - 基准框架 C++

c++ - 使用枚举类定义标志

C++如何使用其中也包含此类的类中的枚举

c++ - 如何仅针对非常量对象定义一些构造函数?

除了 move 构造函数之外的 c++ 右值引用重载

C++ - 在声明之外定义模板成员函数

c++ - 以隐式方式在不同类型之间进行类型转换

c++ - 是否使用 const_cast 对 const 对象进行只读访问?