std::add_lvalue_reference, std::add_rvalue_reference
来自cppreference.com
| 定义于头文件 <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 的右值引用,则 type 为 U& 。否则, type 为 T 。2) 若
T 是对象或无 cv 或引用限定符的 (C++17 起)函数类型,则提供成员 typedef type ,其为 T&& ,否则 type 为 T 。目录 |
[编辑] 成员类型
| 名称 | 定义 |
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++11) |
从给定类型移除引用 (类模板) |
| (C++20) |
将 std::remove_cv 与 std::remove_reference 结合 (类模板) |

