1

我偶然发现了 Scott Mayers 关于通用参考的文章,链接

根据我对通用参考的理解,某种T&&类型在不同的上下文中可能意味着右值或左值类型。

例如:

template<typename T>
void f(T&& param);               // deduced parameter type ⇒ type deduction;
                                 // && ≡ universal reference

在上面的示例中,取决于模板参数,T&&它可以是左值或右值,也就是说,这取决于我们如何调用f

int x = 10;
f(x); // T&& is lvalue (reference)
f(10); // T&& is rvalue

然而,根据 Scott 的说法,如果我们应用于const上面的示例,则类型T&&始终是右值:

template<typename T>
void f(const T&& param);               // “&amp;&” means rvalue reference

引用文章:

即使简单地添加 const 限定符也足以禁用将“&&”解释为通用引用:

问题: 为什么要const制作“通用”参考右值?

我认为这是不可能的,因为下面的代码会造成混淆:

template<typename T>
void f(const T&& param);               // “&amp;&” means rvalue reference

int x = 10;
f(x); // T&& is lvalue (reference) // how does 'x' suddenly become an rvalue because of const?
f(10); // T&& is rvalue // OK
4

0 回答 0