作者dreamboat66 (小嫩)
看板C_and_CPP
标题[问题] 建构解构的初学者问题
时间Fri Dec 2 00:01:39 2016
今天在思考一个很初学者的问题但竟然发现我观念整个有问题
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1480608103.A.A4B.html
1F:→ Caesar08: 关於第一个问题,我之前有写一篇文章 #1NxH6xyZ 12/02 00:21
2F:→ Caesar08: 第二个问题有范例吗? 12/02 00:23
3F:→ dreamboat66: 就上面那测试code Foo& f = get(); 这样怎会给过... 12/02 00:29
4F:→ Caesar08: 我猜你用msvc,然後会过的原因也写在那篇文章了 12/02 00:32
5F:→ dreamboat66: = = 还真的是VC 才给过 我拜读一下文章, 不过这问题 12/02 00:35
6F:→ dreamboat66: 原来不是这麽简单...而且会被别人质疑是不是有欠考虑 12/02 00:35