2015-10-21 63 views
0

讓我們假設我有這樣的類:C++函數調用臨時對象的生命週期

struct QString { 
    //return null terminated array 
    std::vector<char> toLocal8Bit() const; 
}; 

struct string_view { 
    const char *data; 
    size_t len; 
    string_view(const char *str): data(str), len(std::strlen(str)) {} 
}; 

,我有這樣的簽名功能:

void f(const string_view& str); 

它是有效的代碼

QString str; 
f(string_view(&*str.toLocal8Bit().begin())); 

我的意思是當臨時的std :: vector會被銷燬?

回答

3

在完整聲明結束時臨時銷燬。所以這是安全的。

+0

但是這裏實際上是兩個嵌套的臨時對象,它們會以相反的順序被銷燬? – user1244932

+0

這裏沒關係。只有當第二個臨時存在時,第二個臨時存在才重要。 –