【发布时间】:2015-06-06 00:39:52
【问题描述】:
左值引用限定成员函数和非限定成员函数之间有区别吗?如果有,是什么?
即,这两种声明func() 的方式是否不同?
class Foo
{
void func();
void func() &;
};
我的意思不是“它们是否足够不同以允许重载解析”,因为很明显,当func() 的两个版本都存在时,上述类不会编译。我的意思是,当包含 & 和不包含 & 时,编译器的行为如何以及为什么会有所不同?
至少有一个区别,那就是 ref 限定函数(左值或右值类型)不能用非 ref 限定函数重载。来自current standard draft:
同名同名的成员函数声明 参数类型列表以及成员函数模板 具有相同名称、相同参数类型列表和 相同的模板参数列表不能被重载,如果它们中的任何一个,但不是 全部,有一个 ref 限定符。
...但如果这是唯一的区别,为什么要限制?即,为什么不能将 foo()&& 视为(不合格)foo() 的有效覆盖?
【问题讨论】:
标签: c++ c++11 overload-resolution ref-qualifier