forward也有用,用一种简单的方式保证模板参数在函数间传递时“左值依然是左值,右值依然是右值”,
不然传递的有N个参数的话玩起来就要搞2^N种偏特化才能达到这个效果。
不搞模板则无此烦恼
forward的实现也是一个T &&的cast。这个帖子解释得比较清楚:
https://stackoverflow.com/questions/3582001/what-are-the-main-purposes-of-using-stdforward-and-which-problems-it-solves
没有std::forward,那么std::make_unique<T>(a, b, c, ...)这种就难搞,
因为make_unique函数要把参数a, b, c, ... 转发给T的ctor,
同时还要保证各个参数的值类别不变(左值依然是左值,右值依然是右值)。
也就是说,天天用的std::make_unique、std::make_shared的内部就是std::forward的用武之地。
【 在 allegro 的大作中提到: 】
: 的确,move是相当重要的,forward这个就很迷。
:
--
修改:z16166 FROM 125.35.123.*
FROM 125.35.123.*