《Effective Modern C++》学习笔记之条款三十三:对auto&&型别的形参使用declt
来源:http://www.tudoupe.com时间:2022-03-21
一 你有适合Rambda入境的中继器吗?
C++14最令人感兴趣的方面之一是通用羊羔(generic lambda)——汽车可以用于形状横截面。此功能的实施很简单:封闭软件包中的操作员()是通过使用模板完成的。例如,羊羔配方如下:
是指封闭包类的操作员功能,如下所示:
在本例中,在Rambda模式下,x的位移是推动其正常化。如果正常化对左右加以区分,说羊羔是写成的 是有问题的。因为,要正常化,Rambda总是寄送左值(表X),这是个坏主意。即使提供给Rambda的材料是正确的。
写《Rambda》的正确方法是将X传送到正常状态。这就需要对代码作两次修改。首先,第二,X应调整为“一刀切”(见项目24);第三,X通过 stdd: forforward(见项目25)送入正常化。概念上不难理解,在两种情况下均以举手方式进行了调整:
但有一个问题:它在代码中。???应该怎么办呢?
二. 如何完善 Rambda 函数登录
通常情况下,当利用理想的中继时您已输入一个模板函数, 该函数将使用特定类型轨迹 。所以,你写std::forward<T>就好。然而,在泛lambda,然而,没有可以接受的多边形轨迹。羔羊生成的封闭软件包的模板调制器功能中有一个 T 函数 。但是,在Rambda讨论是不可行的。所以也么用。
项目28详述:如果你们把万能的召功,当做薄命,此窗体的类型被引用为左值 。如果传递是右值,,将表单转换成正确的值参考值。这意味着 在我们的羊羔,通过检查它,我们可以确定 x 的类型。以检测传经值是左边还是右边
decltype (x) 返回左值引用类型, 而如果右值被上传, 则 decltype (x) 返回右引用类型 。
项目28还指出,提到带有多边形的左值表明,在使用 std:forward时,希望返回左值和与未参照类型返回的右值。
查看我们的羊羔时, 如果 x 与左边捆绑在一起, delcltype( x) 创建左值参考类型, 这与已知做法一致 。 另一方面, 如果 x 与右边捆绑在一起, Declype( x) 会产生右值参考使用, 而不是不引用, 这与使用也相符 。
三. 模板研究
然后再看一下第28项。
std::forward的C++14实现:
如果客户代码想要正确传达部件其他右值,它应使用部件类型(例如,未参照类型)std::forward,然后std::forward以下功能由模板生成:
但是,如果客户代码要将完全相同的正确值传送到部件,然而,当时通常不把T定为不发号施令的类型。这是T的正确参考,但T的正确参考。这会导致什么结果?这是需要考虑的问题。T指定为Widget&&将会发生什么事情。随着初始解释的完成,以及执行 std:remove_reference_t, 通过 std: forward,然而,在报价崩溃之前(另见项目28),STD: 右转,如下:
然后有一个参考折叠,右转中引用的正确值导致一个单一的权利参照,如下文所示:
在比较之前,我们发现了同样的事情:夸大其词。std::forward当使用正确的值参考类型和非参考类型时,得出相同的结果。
4. 结论
这个结果非常不错,所以如果Rambda型X是正确的,Declype( x) 返回正确值的引用类型 。我们早就知道这一点。当我们给我们提供羊羔配方的左值时Declype( x) 生成一种符合习惯并提供给 std: forward 的类型。而现在,我们还理解,为了权利,尽管除分型(x)没有提供与向std:forward提供的变式管理不一致的类型。然而,结果并不相同。所以,左侧值是否正确, 条件可以在此完成 。
因此,我们可以写:
相关新闻
- 2023-05-06 微pe怎么初始化U盘(微pe怎么恢复初
- 2023-05-06 Xp系统boot 进入pe(boot manager 怎么进入
- 2023-05-06 win pe修复bcdboot(pe修复系统)
- 2023-05-06 win7更新失败 pe(win7更新失败还原更
- 2023-05-06 u盘装了pe读取不了(u盘能进pe读取不
- 2023-05-06 u盘pe 发热(u盘发热烫手)
- 2023-05-06 u盘pe下看不到硬盘(u盘启动pe看不到
- 2023-05-06 pe盘 ntfs(u盘ntfs格式)
- 2023-05-06 sony笔记本进入pe模式(联想笔记本怎
- 2023-05-06 pe启动盘进不去(pe启动盘进不去系统
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
