亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

臨時人員的一生

臨時人員的一生

C++ C
滄海一幻覺 2019-07-20 14:33:06
臨時人員的一生下面的代碼工作正常,但為什么這是正確的代碼?為什么foo()返回的臨時指針“c_str()”有效?我想,輸入bar()時,這個臨時的部分已經被銷毀了-但是它似乎不是這樣的。那么,現在我假設foo()返回的臨時數據將在調用bar()之后銷毀-這是正確的嗎?為什么?std::string foo() {   std::string out = something...;   return out;}void bar( const char* ccp ) {   // do something with the string..}bar( foo().c_str() );
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

$12.2/3-“臨時對象被銷毀,作為評估完整表達式(1.9)的最后一步,這個表達式(在詞匯上)包含創建它們的點,即使該評估以拋出異常結束也是如此?!?/trans>

foo()返回的臨時表達式的生存期將一直延長到創建完整表達式的末尾,即函數調用‘bar’的末尾。

編輯2:

$1.9/12-“一個完整表達式不是另一個表達式的子表達式,如果一個語言結構被定義為產生一個函數的隱式調用,那么就這個定義而言,語言結構的使用被認為是一個表達式。”


查看完整回答
反對 回復 2019-07-20
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

當在詞匯上包含其計算結果所創建的臨時對象的rvalue的完整表達式被完全計算時,臨時對象將被銷毀。讓我用ASCII的藝術來演示:


____________________   full-expression ranges from 'b' to last ')'

bar( foo().c_str() );

     ^^^^^          ^

       |            |

     birth       funeral


查看完整回答
反對 回復 2019-07-20
  • 2 回答
  • 0 關注
  • 439 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號