因此我知道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';
}
感谢您的快速回复。看起来,如果's2'只是另一个'std :: string',结果将是相同的,但是结果二进制文件会有什么不同? –
@BradyDean是的结果是一样的。关于结果二进制文件很难说;无论如何,我试过[这里](https://gcc.godbolt.org/),它给了同样的程序集。 – songyuanyao
请注意,这种情况在C++ 17中发生了变化,在这种情况下,可观察到的差异为零。 – Yakk