有人可以确认我对我们可以超载的理解是否正确?
常量/非常量
可变/不可变
参数类型(显然)
参数数量(显然)
不返回类型
编辑:函数(不是参数类型)是否为易失性/非易失性
我也有点困惑是否可以使用 int、int*、& int 和 && int 来重载具有相同名称的函数?将
void X(int);
void X(int*);
void X(int&);
void X(int&&);
是同一个函数的四个不同的重载版本?
有人可以确认我对我们可以超载的理解是否正确?
常量/非常量
可变/不可变
参数类型(显然)
参数数量(显然)
不返回类型
编辑:函数(不是参数类型)是否为易失性/非易失性
我也有点困惑是否可以使用 int、int*、& int 和 && int 来重载具有相同名称的函数?将
void X(int);
void X(int*);
void X(int&);
void X(int&&);
是同一个函数的四个不同的重载版本?
参数类型和参数数量——这些是区分重载函数的唯一方法。这涵盖了与参数相关的所有内容,包括int/int &/int &&
区别,因为这些是形式上不同的参数类型。
即使将其应用于类方法,您的const/non-const
区别(并且不要忘记volatile
)也可以被视为参数类型的一部分,因为在这种情况下,它确实限定了隐式this
参数。是否要将其视为基于参数的重载或单独的重载取决于您。
我不确定你所说的可变/不可变是什么意思。
还必须说,语言规范有一组定义等效参数声明概念的规则,这意味着出于重载的目的,不同的(按类型)参数声明可能仍被视为等效。