作者:潜伏在人间_144 | 来源:互联网 | 2022-12-10 12:56
C++ Primer 5th:
(代码也来自书中,这里提供了99%的上下文)
#include
using namespace std;
int main()
{
//no error
string s1 = "123", s2 = "aaaa";
s1 + s2 = "wow";
auto a = (s1 + s2).find("a");
}
在新标准(这里是C++ 11)之前,没有办法阻止这种使用.为了保持向后兼容性,库类继续允许赋值给rvalues,但是,我们可能希望在我们自己的类中阻止这种用法.在这种情况下,我们想强制左手操作数(即this
点的对象)为左值.
什么向后兼容性需要为rvalues分配?
顺便说一句,我也很好奇为什么s1 + s2 = "wow"
被允许但int i = 3, j = 4; i + j = 7;
不允许.(因为它密切相关,我选择不打开另一个问题)