何时评估了右值?

Bra*_*ean 6 c++ temporary rvalue rvalue-reference c++11

所以我理解s2绑定到表达式s1 + s1,但是当时评估的是这个,s2还是懒惰并在s2 += "Test";被调用时进行评估?还会s2为临时字符串保存内存吗?

#include <iostream>
#include <string>

int main()
{
    std::string s1 = "Test";
    std::string&& s2 = s1 + s1;
    s2 += "Test";
    std::cout << s2 << '\n';
}
Run Code Online (Sandbox Code Playgroud)

son*_*yao 16

s2结合到表达s1 + s1,但是这在时间评价s2被分配

是.

还会s2为临时字符串保存内存吗?

确切地说,s2必然是暂时的std::string.

s1 + s1将生成一个临时的std::string,将绑定到引用s2(并将其生命周期延长到引用的生命周期).然后s2 += "Test";,执行operator+=()s2,即临时std::string.