定义于头文件
<type_traits>
|
||
template< class T >
struct add_lvalue_reference; |
(1) | (C++11 起) |
template< class T >
struct add_rvalue_reference; |
(2) | (C++11 起) |
创建 T
的左值或右值引用类型。
T
是对象或无 cv 或引用限定符的 (C++17 起)函数类型,则提供成员 typedef type
,其为 T&
。若 T
是到某类型 U
的右值引用,则 type
为 U&
。否则, type
为 T
。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 结合 (类模板) |