引用
template<typename T>
void fun(ParamType param); // ParamType is some form of T, e.g. T, T&, T const, ...
fun(expr); // expr is an expression
我知道&&
中的ParamType
“某处”不足以使ParamType
成为通用引用,例如ParamType = std::vector<T>&&
是右值引用。 &&
必须紧靠模板参数T
(T&&
)才能成为通用引用。但我也知道
T&&
中的“某处”的ParamType
仍然不够用,例如ParamType = std::remove_reference_t<T&&>
并非通用引用。因此,我几乎在问
ParamType
的“表单”对转发引用有什么要求?但是,by doing a bit of research,我觉得我需要问一个更“二进制”的问题:
为简单起见,假设
T
是唯一的模板参数,因此ParamType
只是T
的函数(从数学上来说),是否正确地说这两个都是正确的T
以ParamType
的形式出现在T&&
中fun
推导T
和PramType
(即无需通过T
传递fun<T>
)那么
ParamType
是通用引用吗?换句话说,如果
ParamType
包含推导了T&&
的T
,它是否始终是通用引用? 最佳答案
根据标准(最新草案):
类型“中”是什么都无关紧要,但是是是什么类型。如果它是对函数模板参数的cv不合格右值引用,则它是转发引用。
例如,Foo<T&&>
中包含“T&&
”,但它不是转发引用。 ParamType
也不是转发引用,因为它不是函数的模板参数。
关于c++ - 是否在其中带有 `T&&`并推导出 `T`的参数类型始终是通用引用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64956682/