2013-11-28 95 views
1

下面的代碼在C++中可以接受嗎?如果是這樣,會發生什麼?它是否創建一個臨時字符串變量並傳遞它的地址?我們可以將char *傳遞給const字符串嗎?

void f(const string& s) { 
} 
const char kJunk[] = "junk"; 
f(kJunk); 
+3

你試過了嗎? – billz

+0

這需要不到一分鐘的時間... – Sean

+1

這很好,它確實創建了一個臨時字符串對象並將引用傳遞給它。 – john

回答

8

是的,這是可以接受的。編譯器將調用string(const char *)構造函數並創建一個在調用期間將被綁定到s的臨時對象。當回落到f時,臨時將被銷燬。

3

將字符數組的參數隱式轉換爲std :: string類型的臨時對象,編譯器將此臨時對象的const引用傳遞給該函數。當調用該函數的語句將完成其工作時,臨時對象將被刪除。

2

它創建一個臨時字符串變量並傳遞它的地址嗎?

是的,它等同於:

void f(const std::string& s) { 
} 
const char kJunk[] = "junk"; 
f(std::string(kJunk)); 
相關問題