class A { public: A(){} }; void foo(){ throw new A; }
&&就是右值引用, &是普通的左值引用, 左值是可以放在赋值号=左边的值, 右值是只能放在=右边的值, 右值没有一个"变量"名字, i+j返回的值可以视作是放在一个临时存放内存空间里的, 这个空间并不能被用来赋值, 你不能写i+j = 5等; &&可以把这种临时的值和存在变量里的值区分开来
常见应用情况是, 例如String类内部都有一个char *指针pstr指向实际存放字符串的内存, 当写str3 = str1.concat(str2)的时候实际执行了2次构造函数, 第一次是concat构造一个新的String对象, 第二次是赋值的时候执行了一次拷贝构造函数(或者operator=)把concat返回的临时值复制了一次给str3的内存, 然后concat的临时值在之后立即被销毁了, 显然这个第二次拷贝构造很多余
String(String &&other) {