因此我知道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