比方說,我們有這種情況RVO是否適用於這種情況?
std::string v_1()
{
return "name";
}
std::string test = v_1();
是RVO應用在這裏?我認爲答案是否定的,因爲應用RVO的規則是:「如果一個函數按值返回一個類的類型,並且return語句的表達式是一個非自動存儲持續時間的非易失性對象的名稱,函數參數或catch子句參數與具有相同類型(忽略頂級cv資格)作爲函數的返回類型,則複製/移動被省略「 而在這種情況下返回的對象沒有相同類型的函數的返回類型,但我不是100%,RVO不適用於此處。
非常感謝。
PS。在這次演講中https://www.youtube.com/watch?v=AKtHxKJRwp4(分鐘40,第18次)來自微軟的Stephan談到了RVO無法應用的情況,因爲函數的返回類型與返回對象的類型不同(在他的例子中是一個元組與一對)。我認爲這裏適用同樣的原則。
它大部分等價於'return std :: string(「name」)'...... – Jarod42
返回的結果是* not * const char *'... – user268396
@ user268396你是對的,但是在大多數情況下案例(也在這裏)它被隱式轉換爲一個之前轉換爲字符串... :) –