考虑以下代码:
#include<utility>
struct S {
void f(int) = delete;
void f(int) && { }
};
int main() { }
它不会编译说成员方法不能重载,当然这是有道理的。
另一方面,以下代码编译:
#include<utility>
struct S {
void f(int) & = delete;
void f(int) && { }
};
int main() {
S s;
// s.f(42); <-- error, deleted member method
std::move(s).f(42);
}
那是合法的代码吗?
难道不能在同一个类中定义两个完全不同的接口,前者用于左值,后者用于右值?
除了它没有多大意义之外,它真的伤害了我。
不应该将已删除的函数作为一个整体删除,而不是仅当您是左值时才删除?
此功能的目的是什么?它是经典的不起眼的角落案例还是我看不到的东西?