6
为什么我们不能同时使用getAB() &&
和getAB()
这两种方法,但是可以实现这些方法中的任何一种?为什么我们不能实现`getAB()&&`和`getAB()`两个方法?
代码:
struct Beta {
Beta_ab ab;
Beta_ab && getAB() && { cout << "1"; return move(ab); }
};
int main() {
Beta_ab ab = Beta().getAB();
return 0;
}
- 作品:http://ideone.com/m9d0Tz
- Doen't作品:http://ideone.com/QIQtZ5
代码:
struct Beta {
Beta_ab ab;
Beta_ab && getAB() { cout << "2"; return move(ab); }
};
int main() {
Beta b;
Beta_ab ab = b.getAB();
return 0;
}
代码:
struct Beta {
Beta_ab ab;
Beta_ab && getAB() && { cout << "1"; return move(ab); }
Beta_ab && getAB() { cout << "2"; return move(ab); }
};
int main() {
Beta b;
Beta_ab ab1 = b.getAB();
Beta_ab ab2 = Beta().getAB();
return 0;
}
为什么代码的第一两个例子作品,但最后一个例子不起作用?
与您的问题无关,但在制作[MCVE](https://stackoverflow.com/help/mcve)时,请确保其中没有无关的错误。无关的错误会分散实际问题。我当然在谈论你在'main'函数中重新定义变量'ab'。 –
如果有任何重载是引用限定的,那么_all_重载必须是引用限定的 - 将第二个重载更改为“Beta_ab && getAB()&{cout <<”2“;返回移动(ab); }'。 (不作为答案张贴,因为这肯定是一个骗局。) – ildjarn
可以在左值*或右值上调用不带ref参数限定符的重载,例如'Beta_ab && getAB()'。rvalue ref限定符“Beta_ab && getAB()&&”的重载只能在rvalues上调用。因此,如果两者都允许共存,那么在右值上调用'getAB()'将会是*模糊的。 –