对于一些模板参数T,T&是什么意思?

9
例如
template<class T>
struct Ref
{
    using type = T&;
};
< p>对于所有可能的模板参数,Ref<T> ::type是否与std :: add_lvalue_reference <T> ::type 相同?例如,int int&int&&

我刚刚阅读了std :: add_lvalue_reference <T>的源代码。非常确定它们是等效的。
如果是这样,我们可以通过简单地编写T&来节省一些空间。


@cdhowie 哇,我甚至不知道那个问题。答案看起来有些相似... - Columbo
1个回答

6
中的表格53-add_lvalue_reference的定义如下:

如果T指代一个对象或函数类型,则成员typedef类型应该指代T&; 否则,如果T指代“T1的右值引用”类型,则成员typedef类型应该指代T1&; 否则,该类型应该指代T

现在回想一下引用折叠的规则:

如果[…]类型模板参数(14.3.1)[…]表示是一个指向类型T的引用类型TR那么在试图创建类型“cvTR的左值引用”时,会创建类型“T的左值引用” […]

因此答案是肯定的:

  • 对于对象或函数来说,条件是显然满足的。只是一个T&,没有涉及引用折叠。

  • 对于右值引用,将创建指向所引用类型T1的左值引用类型。< / p >

  • 对于左值引用,确切的引用类型保持不变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接