重载函数的不同方式

Different ways of overloading functions?

本文关键字:方式 函数 重载      更新时间:2023-10-16

谁能确认一下我对超载的理解是否正确?

  • const/non-const

  • 可变/non-mutable
  • 参数类型(明显)

  • 参数个数(明显)

  • 不返回类型

  • EDIT:函数(不包括参数类型)是否易失性/非易失性

我也有点困惑是否int, int*, &Int and &&Int可以用来重载同名函数吗?

void X(int);
void X(int*);
void X(int&);
void X(int&&);

是同一函数的四个不同的重载版本?

形参类型和形参数量——这是区分重载函数的唯一方法。这涵盖了与参数相关的所有内容,包括int/int &/int &&的区别,因为它们是形式上不同的参数类型。

您的const/non-const区别(不要忘记volatile)可以被认为是参数类型的一部分,即使它应用于类方法,因为在这种情况下,它确实限定了隐式this参数。这取决于您,是将其视为基于参数的重载,还是将其视为单独的重载。

我不知道你说的可变/不可变是什么意思。

还必须指出,语言规范有一组规则定义了等效参数声明的概念,这意味着对于重载的目的,不同的(按类型)参数声明可能仍然被认为是等效的。