左值引用限定成员函数和非限定成员函数之间有区别吗?如果是这样,它是什么?
即,这两种声明方式func()
不同吗?
class Foo
{
void func();
void func() &;
};
func()
我的意思不是“它们是否足够不同以允许重载解析”,因为显然当两个版本都存在时,上述类不会编译。&
我的意思是,编译器在包含与不包含时如何以及为什么会表现不同?
至少有一个区别,即 ref 限定函数(左值或 r 值类型)不能用非 ref 限定函数重载。从目前的标准草案:
同名同参数类型列表的成员函数声明,同名同参数类型列表的成员函数模板声明,同模板形参列表中的任何一个都不能重载,但是不是全部,有一个参考限定符。
...但如果这是唯一的区别,为什么要限制?即,为什么不能foo()&&
被视为 (unqualified) 的有效覆盖foo()
?