看板 C_and_CPP 關於我們 聯絡資訊
今天在思考一個很初學者的問題但竟然發現我觀念整個有問題 http://ideone.com/weYKZC 很簡單的我想知道一個function call return by value回來 我如果用const & 去接 我觀念上會覺得 如果我不去注意function的return type(如果是by value) 我很有可能拿到一個dangling reference而不自覺 問題是上面的程式碼 解構的時機竟然是main結束(我預期是跳離get就解構) 我誤會什麼了嗎.... 第二個問題是 我觀念上 function return by value的話 是rvalue 所以我不能用 non-const&去接 但我如果用Foo& , 是可以接的...答案也跟const&沒有差異 請問這是為什麼? 觀念又錯了嗎 如果有move constructor Foo(get()); 確實會是走Foo(Foo&&)沒錯阿 rvalue.... 可能有RVO介入所以我用local變數去return 但他還是會拿到奇怪的temp varaible的address 所以說 一個function的return value 他的scope不是function return後開始解構而是 更上一層function return後才開始解構嗎?? 沒有很清楚這邊的觀念 我自己是覺得不該這樣阿 請各位幫我突破盲點...謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.202.250 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1480608103.A.A4B.html
Caesar08: 關於第一個問題,我之前有寫一篇文章 #1NxH6xyZ 12/02 00:21
Caesar08: 第二個問題有範例嗎? 12/02 00:23
dreamboat66: 就上面那測試code Foo& f = get(); 這樣怎會給過... 12/02 00:29
Caesar08: 我猜你用msvc,然後會過的原因也寫在那篇文章了 12/02 00:32
dreamboat66: = = 還真的是VC 才給過 我拜讀一下文章, 不過這問題 12/02 00:35
dreamboat66: 原來不是這麼簡單...而且會被別人質疑是不是有欠考慮 12/02 00:35