[问题] 建构解构的初学者问题

楼主: dreamboat66 (小嫩)   2016-12-02 00:01:39
今天在思考一个很初学者的问题但竟然发现我观念整个有问题
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后才开始解构吗??
没有很清楚这边的观念 我自己是觉得不该这样阿
请各位帮我突破盲点...谢谢
作者: Caesar08 (Caesar)   2016-12-02 00:21:00
关于第一个问题,我之前有写一篇文章 #1NxH6xyZ第二个问题有范例吗?
楼主: dreamboat66 (小嫩)   2016-12-02 00:29:00
就上面那测试code Foo& f = get(); 这样怎会给过...
作者: Caesar08 (Caesar)   2016-12-02 00:32:00
我猜你用msvc,然后会过的原因也写在那篇文章了
楼主: dreamboat66 (小嫩)   2016-12-02 00:35:00
= = 还真的是VC 才给过 我拜读一下文章, 不过这问题原来不是这么简单...而且会被别人质疑是不是有欠考虑

Links booklink

Contact Us: admin [ a t ] ucptt.com