std::is_const
来自cppreference.com
在标头 <type_traits> 定义
|
||
template< class T > struct is_const; |
(C++11 起) | |
std::is_const
是一元类型特性 (UnaryTypeTrait) 。
如果 T
为 const 限定类型(即 const 或 const volatile ),那么成员常量 value
等于 true。对于其它类型,value
等于 false。
添加 std::is_const
或 std::is_const_v
的特化的程序行为未定义。
模板形参
T | - | 要检查的类型 |
辅助变量模板
template< class T > inline constexpr bool is_const_v = is_const<T>::value; |
(C++17 起) | |
继承自 std::integral_constant
成员常量
value [静态] |
如果 T 为 const 限定类型那么是 true,否则是 false (公开静态成员常量) |
成员函数
operator bool |
将对象转换到 bool,返回 value (公开成员函数) |
operator() (C++14) |
返回 value (公开成员函数) |
成员类型
类型 | 定义 |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
注意
若 T 为引用类型则 is_const<T>::value 始终为 false 。检查可能为引用的类型的常性的正确方式是移除引用: is_const<typename remove_reference<T>::type> 。
可能的实现
template<class T> struct is_const : std::false_type {}; template<class T> struct is_const<const T> : std::true_type {}; |
示例
运行此代码
#include <iostream> #include <type_traits> int main() { std::cout << std::boolalpha << std::is_const_v<int> << '\n' // false << std::is_const_v<const int> << '\n' // true << std::is_const_v<const int*> /*false*/ << " because the pointer itself can be changed but not the int pointed at\n" << std::is_const_v<int* const> /*true*/ << " because the pointer itself can't be changed but the int pointed at can\n" << std::is_const_v<const int&> << '\n' // false << std::is_const_v<std::remove_reference_t<const int&>> << '\n' // true ; }
输出:
false true false because the pointer itself can be changed but not the int pointed at true because the pointer itself can't be changed but the int pointed at can false true
参阅
(C++11) |
检查类型是否为 volatile 限定 (类模板) |
(C++17) |
获得到其实参的 const 引用 (函数模板) |