std::add_lvalue_reference, std::add_rvalue_reference

定义于头文件 <type_traits>
template< class T >
struct add_lvalue_reference;
(1) (C++11 起)
template< class T >
struct add_rvalue_reference;
(2) (C++11 起)

创建 T 的左值或右值引用类型。

1)T 是对象或无 cv 或引用限定符的 (C++17 起)函数类型,则提供成员 typedef type ,其为 T& 。若 T 是到某类型 U 的右值引用,则 typeU& 。否则, typeT
2)T 是对象或无 cv 或引用限定符的 (C++17 起)函数类型,则提供成员 typedef type ,其为 T&& ,否则 typeT

目录

成员类型

名称 定义
type T 的引用,或若不允许则为 T

辅助类型

template< class T >
using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;
(C++14 起)
template< class T >
using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;
(C++14 起)

注意

这些类型变换尊重折叠规则:

std::add_lvalue_reference<T&>::type is T&
std::add_lvalue_reference<T&&>::type is T&
std::add_rvalue_reference<T&>::type is T&
std::add_rvalue_reference<T&&>::type is T&&

示例

#include <iostream>
#include <type_traits>
 
int main() {
   using nonref = int;
   using lref = typename std::add_lvalue_reference<nonref>::type;
   using rref = typename std::add_rvalue_reference<nonref>::type;
 
   std::cout << std::boolalpha;
   std::cout << std::is_lvalue_reference<nonref>::value << '\n';
   std::cout << std::is_lvalue_reference<lref>::value << '\n';
   std::cout << std::is_rvalue_reference<rref>::value << '\n';
}

输出:

false
true
true

参阅

(C++11)
检查类型是否为左值引用右值引用
(类模板)
从给定类型移除引用
(类模板)
(C++20)
std::remove_cvstd::remove_reference 结合
(类模板)

版本历史

  • (当前 | 先前 2017年11月26日 (日) 09:47Fruderica讨论 | 贡献 . . (2,218字节) (0). . (辅助) (撤销)
  • 当前 | 先前 2017年11月13日 (一) 04:46Fruderica讨论 | 贡献 . . (2,218字节) (+41). . (+ remove_cvref) (撤销)
  • 当前 | 先前 2017年7月22日 (六) 23:54Fruderica讨论 | 贡献. . (2,177字节) (+190). . (撤销)
  • 当前 | 先前 2014年10月26日 (日) 18:11P12bot讨论 | 贡献 . . (1,987字节) (0). . (Fix some translations) (撤销)
  • 当前 | 先前 2013年7月2日 (二) 11:38P12bot讨论 | 贡献 . . (1,987字节) (-135). . (Use {{lc}}. Update links. Various fixes.) (撤销)
  • 当前 | 先前 2012年11月2日 (五) 17:30P12bot讨论 | 贡献 . . (2,122字节) (+249). . (r2.7.3) (机器人添加:de, en, es, fr, it, ja, pt, ru) (撤销)
  • 当前 | 先前 2012年10月27日 (六) 11:35P12讨论 | 贡献 . . (1,873字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 06:00TranslationBot讨论 | 贡献. . (1,873字节) (-50). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 03:32P12讨论 | 贡献 . . (1,923字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前) 2012年10月25日 (四) 12:00TranslationBot讨论 | 贡献. . (1,923字节) (+1,923). . (Translated from the English version using Google Translate)