std::add_lvalue_reference和的目的是std::add_rvalue_reference什么?
似乎使用T &/可以T &&做到这一点,因为它可以成功编译:
#include <utility>
int main() {
{ using T = int; static_assert(std::is_same_v<std::add_lvalue_reference_t<T>, T &>); };
{ using T = int &; static_assert(std::is_same_v<std::add_lvalue_reference_t<T>, T &>); };
{ using T = int &&; static_assert(std::is_same_v<std::add_lvalue_reference_t<T>, T &>); };
{ using T = int; static_assert(std::is_same_v<std::add_rvalue_reference_t<T>, T &&>); };
{ using T = int &; static_assert(std::is_same_v<std::add_rvalue_reference_t<T>, T &&>); };
{ using T = int &&; static_assert(std::is_same_v<std::add_rvalue_reference_t<T>, T &&>); };
}
Run Code Online (Sandbox Code Playgroud)
void&格式不正确。 std::add_lvalue_reference<void>是void。
通常,add_lvalue_reference如果不可能,则不添加对类型的引用。每[meta.trans.ref]:
Run Code Online (Sandbox Code Playgroud)template <class T> struct add_lvalue_reference;如果T命名为可引用类型,则成员typedef
type命名为T&;否则,type名称T。[ 注意:此规则反映了引用折叠([dcl.ref])的语义。— 尾注 ]
什么是可引用类型?根据[defns.referenceable],可引用类型为
对象类型,没有cv限定符或ref限定符的函数类型或引用类型[ 注意:该术语描述了可以创建引用的类型,包括引用类型。— 尾注 ]
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |