gpt4 book ai didi

c++ - 为什么 const 模板参数不是通用/转发引用

转载 作者:行者123 更新时间:2023-12-01 14:03:00 27 4
gpt4 key购买 nike

我正在阅读有关通用引用/转发引用和 this link says那:
这里param是通用引用 :

template<typename T>
void f(T&& param);
但是这里 param不是通用引用,它是右值引用 :
template<typename T>
void f(const T&& param);
通用引用的定义如下:

If a variable or parameter is declared to have type T&& for some deduced type T, that variable or parameter is a universal reference.


而且我读到 T 是推导类型,因为 Template argument deduction .
为什么第二种情况不是通用引用?是否存在 const T&& param不遵循模板参数推导,出于某种原因?如果是这样,为什么?

最佳答案

前言:官方用语是转发引用。

So why is the second case not a universal reference?


因为它是对 const 的引用。并且对 const 的引用不是转发引用。

why?


转发引用的全部意义在于,当将右值作为参数给出时,该参数将被推断为对非常量右值的引用,这允许在转发时移动此类参数(同时允许不移动左值) )。您不能从对 const 的引用移动,因为移动构造函数的参数将是对非 const 的右值引用,它不能绑定(bind)到对 const 的引用。
语言律师的回答是:因为标准是这样说的:

[temp.deduct.call] A forwarding reference is an rvalue reference to a cv-unqualified template parameter that does not represent a template parameter of a class template ...

关于c++ - 为什么 const 模板参数不是通用/转发引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63569885/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com