add_lvalue_reference / add_rvalue_reference和cv限定类型

ant*_*_rh 4 c++ c++-standard-library

关于std::add_lvalue_reference/的cppreference.comstd::add_rvalue_reference

如果T是一个对象类型或函数类型没有CV-或REF-限定符,提供了一种构件的typedef类型,其为T &&,否则类型为T

这是否意味着如果T为constvolatile,则T 不会转换为引用?如果否,那么这意味着“没有cv限定词”是什么意思。

Nat*_*ica 5

这是否意味着如果T为const或volatile,则T不会转换为引用?

是的,但前提是它是一个函数。

cppreference中的引号可能会有些混乱。cppreference有

如果T是没有cv-或ref限定符的对象类型或函数类型,则提供成员typedef类型为T &&&,否则为T。

这可以使您相信cv-qualifer部分适用于对象和函数,但事实并非如此。该标准的实际文字

对象类型,没有cv限定词或ref限定词的函数类型或引用类型

因此,任何没有cv-qualifierref-qualifier的对象类型和任何函数都将产生引用。具有cv限定词和/或ref限定词的引用或函数将产生T


当您看到cv-qualifier表示const和或volatile限定符时,即它是const和或volatile对象或const或volatile限定函数。 ref-qualifier表示引用限定符,即只能在左值或右值上调用该函数:void foo() &void foo() &&