1

有人可以确认我对我们可以超载的理解是否正确?

  • 常量/非常量

  • 可变/不可变

  • 参数类型(显然)

  • 参数数量(显然)

  • 不返回类型

  • 编辑:函数(不是参数类型)是否为易失性/非易失性

我也有点困惑是否可以使用 int、int*、& int 和 && int 来重载具有相同名称的函数?

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

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

4

1 回答 1

7

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

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

我不确定你所说的可变/不可变是什么意思。

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

于 2013-06-03T20:48:06.587 回答