巢湖建设网站,网络推广渠道有哪些方式,a5建站,温州网站建设成功案例类型特性
类型特性定义一个编译时基于模板的结构#xff0c;以查询或修改类型的属性。
试图特化定义于 type_traits 头文件的模板导致未定义行为#xff0c;除了 std::common_type 可依照其所描述特化。
定义于type_traits头文件的模板可以用不完整类型实…类型特性
类型特性定义一个编译时基于模板的结构以查询或修改类型的属性。
试图特化定义于 type_traits 头文件的模板导致未定义行为除了 std::common_type 可依照其所描述特化。
定义于type_traits头文件的模板可以用不完整类型实例化除非另外有指定尽管通常禁止以不完整类型实例化标准库模板。
类型属性
定义于头文件 type_traits
基础类型类别
继承自 std::integral_constant
成员常量 value [静态] 若 T 为指针类型则为 true 否则为 false (公开静态成员常量)
成员函数 operator bool 转换对象为 bool 返回 value (公开成员函数) operator() (C14) 返回 value (公开成员函数)
成员类型
类型定义value_typebooltypestd::integral_constantbool, value 检查类型是否为指针类型
std::is_pointer template class T struct is_pointer; (C11 起)
检查 T 是否为指向对象指针或指向函数指针但不是指向成员/成员函数指针。若 T 是对象/函数指针类型则提供等于 true 的成员常量 value 。否则 value 等于 false 。
模板形参
T-要检查的类型
辅助变量模板 template class T inline constexpr bool is_pointer_v is_pointerT::value; (C17 起)
可能的实现
template class T struct is_pointer_helper : std::false_type {};
template class T struct is_pointer_helperT* : std::true_type {};
template class T struct is_pointer :
is_pointer_helpertypename std::remove_cvT::type {}; 检查类型是否为左值引用
std::is_lvalue_reference template class T struct is_lvalue_reference; (C11 起)
检查 T 是否为左值引用类型。若 T 是左值引用类型则提供等于 true 的成员常量 value 否则 value 等于 false 。
模板形参
T-要检查的类型
辅助变量模板 template class T inline constexpr bool is_lvalue_reference_v is_lvalue_referenceT::value; (C17 起)
可能的实现
templateclass T struct is_lvalue_reference : std::false_type {};
templateclass T struct is_lvalue_referenceT : std::true_type {}; 检查类型是否为右值引用
std::is_rvalue_reference template class T struct is_rvalue_reference; (C11 起)
检查 T 是否为右值引用类型。若 T 是右值引用类型则提供等于 true 的成员常量 value 否则 value 等于 false 。
模板形参
T-要检查的类型
辅助变量模板 template class T inline constexpr bool is_rvalue_reference_v is_rvalue_referenceT::value; (C17 起)
可能的实现
template class T struct is_rvalue_reference : std::false_type {};
template class T struct is_rvalue_referenceT : std::true_type {}; 调用示例
#include iostream
#include type_traitsclass A {};int main()
{std::cout std::boolalpha;std::cout std::is_pointerA::value: std::is_pointerA::value std::endl;std::cout std::is_pointerA *::value: std::is_pointerA *::value std::endl;std::cout std::is_pointerA ::value: std::is_pointerA ::value std::endl;std::cout std::is_pointerint::value: std::is_pointerint::value std::endl;std::cout std::is_pointerint *::value: std::is_pointerint *::value std::endl;std::cout std::is_pointerint **::value: std::is_pointerint **::value std::endl;std::cout std::is_pointerint[10]::value: std::is_pointerint[10]::value std::endl;std::cout std::is_pointerstd::nullptr_t::value: std::is_pointerstd::nullptr_t::value std::endl;std::cout std::endl;std::cout std::is_lvalue_referenceA::value: std::is_lvalue_referenceA::value std::endl;std::cout std::is_lvalue_referenceA::value: std::is_lvalue_referenceA::value std::endl;std::cout std::is_lvalue_referenceA::value: std::is_lvalue_reference A ::value std::endl;std::cout std::is_lvalue_referenceint::value: std::is_lvalue_referenceint::value std::endl;std::cout std::is_lvalue_referenceint::value: std::is_lvalue_referenceint::value std::endl;std::cout std::is_lvalue_referenceint::value: std::is_lvalue_reference int ::value std::endl;std::cout std::endl;std::cout std::is_rvalue_referenceA::value: std::is_rvalue_referenceA::value std::endl;std::cout std::is_rvalue_referenceA::value: std::is_rvalue_referenceA::value std::endl;std::cout std::is_rvalue_referenceA::value: std::is_rvalue_reference A ::value std::endl;std::cout std::is_rvalue_referenceint::value: std::is_rvalue_referenceint::value std::endl;std::cout std::is_rvalue_referenceint::value: std::is_rvalue_referenceint::value std::endl;std::cout std::is_rvalue_referenceint::value: std::is_rvalue_reference int ::value std::endl;std::cout std::endl;return 0;
}
输出