http://ideone.com/V97HkZ
一开始在测试std::async的时候无意间发现
如果没有接return value跟有接return value的话
行为有差异
有接: 不会block在那行直接往下走(async)
没接: 就直接卡在那直到thread做完
以上结论让我想了一下, 姑且不知道它内部怎么实做
但 为什么它有能力可以判断 有接 or 没接
我自己的想法是 如果有接, 也许它会走future的move cstr(or move =)
可能可以在解构的时候判断是否被move过
move的话就 detach, 没move的话就就join...
但这件事如果RVO的话 根本不保証它会有move产生...
所以问题就是
1. 有没写法一定可以让RVO无效
2. 有没有好的写法可以判断 有接跟没接这两种case?
3. 我看了一下vc跟g++的 future dstr都是空的没做事...表示我一开始的想法都是错的
到底它怎么做到这行为的呢?
谢谢