2016-06-24 113 views
1
void print(const string& str){ 
    cout << str <<endl;; 
} 

int main(){ 
    print(string("asdf")); 
} 

我想我可以理解這種方式 有一個臨時的字符串對象被創建並通過引用傳遞給函數。參數str實際上與該臨時字符串對象完全相同。函數參數字符串通過引用傳遞

但怎麼樣,如果我更換打印(「ASDF」)的調用;? 在這種情況下究竟發生了什麼? 我知道涉及隱式轉換。但我不確定何時以及如何完成? 我的意思是它有創建,以及一個臨時的字符串對象?

+4

同樣的事情也會被隱式進行。 – songyuanyao

回答

2

你的理解是正確的。

什麼是在這種情況下究竟發生了什麼?我知道包含隱式轉換。

完全相同的事情發生,但涉及隱式轉換,而不是顯式調用構造函數。


但我不知道什麼時候,它是如何做的?

cppreference引用:執行

隱式轉換每當某種類型T1的表達在上下文中,不接受該類型被使用,但接受一些其它類型的T2


我的意思是它有創建,以及一個臨時的字符串對象?

是的。

1

是的,因爲string具有構造這需要const char*string (const char* s)),並且此構造沒有標記explicit,編譯器將建立代碼等同於你的問題。