August 2021
Intermediate to advanced
450 pages
6h 57m
Chinese
本节介绍的工具数量少,但重要性并不低,它们只是不能归入大类而已。
在<utility>中,标准库提供了一些最有用的小函数:
move()进行简单的右值转换:
我的观点,move()应该命名为rvalue()才对,因为它并没有移动任何东西,而是从实参生成一个右值,从而所指向的对象可以移动。
我们用move()告知编译器:此对象在上下文中不再被使用,因此其值可被移动,留下一个空对象。最简单的例子是swap()的实现(见35.5.2)。
forward()从右值生成一个右值:
这对forward()函数总是会一起提供,两者间的选择是通过重载解析实现的。在本例中,任何左值都会由第一个版本处理,而任何右值都会转向第二个版本。例如:
断言语句是为了防止聪明过头的程序员用一个显式模板实参和一个左值调用第二个版本。
forward()的典型用法是将一个实参从一个函数“完美转发”到另一个函数(见23.5.2节和28.6.3节)。标准库make_shared<T>(x)(见34.3.2节)是一个很好的例子。 ...
Read now
Unlock full access