下面的代碼在C++中可以接受嗎?如果是這樣,會發生什麼?它是否創建一個臨時字符串變量並傳遞它的地址?我們可以將char *傳遞給const字符串嗎?
void f(const string& s) {
}
const char kJunk[] = "junk";
f(kJunk);
下面的代碼在C++中可以接受嗎?如果是這樣,會發生什麼?它是否創建一個臨時字符串變量並傳遞它的地址?我們可以將char *傳遞給const字符串嗎?
void f(const string& s) {
}
const char kJunk[] = "junk";
f(kJunk);
是的,這是可以接受的。編譯器將調用string(const char *)
構造函數並創建一個在調用期間將被綁定到s
的臨時對象。當回落到f
時,臨時將被銷燬。
將字符數組的參數隱式轉換爲std :: string類型的臨時對象,編譯器將此臨時對象的const引用傳遞給該函數。當調用該函數的語句將完成其工作時,臨時對象將被刪除。
它創建一個臨時字符串變量並傳遞它的地址嗎?
是的,它等同於:
void f(const std::string& s) {
}
const char kJunk[] = "junk";
f(std::string(kJunk));
你試過了嗎? – billz
這需要不到一分鐘的時間... – Sean
這很好,它確實創建了一個臨時字符串對象並將引用傳遞給它。 – john