是對以下C++代碼合式:的std :: string :: c_str()和臨時
void consumer(char const* p)
{
std::printf("%s", p);
}
std::string random_string_generator()
{
// returns a random std::string object
}
consumer(random_string_generator().c_str());
我與它的問題是,創建臨時的std :: string對象和服用後c_str()指針,什麼都不能阻止std :: string對象被破壞(或者我錯了?)。你能指點我的標準嗎,如果代碼是好的,儘管一切。它工作,當我用g ++測試時。
您能否提供關於C++ 03或C++ 11標準的提示? – user1095108 2012-04-04 07:53:01
臨時的生命週期在§12.2中定義。 (第12部分是 ,標題爲「特殊成員函數」,它不是 期望尋找臨時對象的生命期的地方,但這就是它的位置。) – 2012-04-04 07:56:24
@ user1095108函數參數的生命週期可以從§ 3.2.2和§3.7.2在C++ 03標準中。 – juanchopanza 2012-04-04 08:24:46