考慮下面的代碼:如何將字符串文字傳遞給在C++中處理的函數?
void consumeString(std::string str){
/* some code */
}
void passStringObject(){
std::string stringObject = "string literal";
consumeString(stringObject);
}
void passStringLiteral(){
consumeString("string literal");
}
現在考慮以下兩種情況:
1)函數passStringObject()
被調用。
2)函數passStringLiteral()
被調用。
在案例1我假設 - 內passStringObject
調用函數consumeString
時 - 變量stringObject
只是傳遞給函數consumeString
; string類的拷貝構造函數被調用,所以(因爲呼叫按價值)參數str是傳遞給函數consumeString
的變量stringObject
的副本。
但是,如果函數consumeString
被調用,情況2會發生什麼?在調用複製構造函數並將「隱藏」變量的值複製到參數str
之前,字符串類的(重載)賦值操作符(可能將文字賦值給背景中的某個「隱藏」變量?
臨時的'std :: string'實例將被創建並在case 2中使用 –