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

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

臨時人員的一生

臨時人員的一生

C++
ITMISS 2019-08-03 07:03:15
臨時人員的一生下面的代碼工作正常,但為什么這是正確的代碼?為什么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 回答

?
MYYA

TA貢獻1868條經驗 獲得超4個贊

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

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

編輯2:

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




查看完整回答
反對 回復 2019-08-04
?
揚帆大魚

TA貢獻1799條經驗 獲得超9個贊

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


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

bar( foo().c_str() );

     ^^^^^          ^

       |            |

     birth       funeral



查看完整回答
反對 回復 2019-08-04
  • 2 回答
  • 0 關注
  • 319 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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