std::is_const

来自cppreference.com
< cpp‎ | types
 
 
元编程库
类型特性
类型类别
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型属性
is_const
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++20 前)
(C++11)(C++20 中弃用)
(C++11)
类型特性常量
元函数
(C++17)
受支持操作
关系与属性查询
类型修改
(C++11)(C++11)(C++11)
类型变换
(C++11)
(C++11)
(C++17)
(C++11)(C++20 前)(C++17)
编译时有理数算术
编译时整数序列
 
在标头 <type_traits> 定义
template< class T >
struct is_const;
(C++11 起)

std::is_const一元类型特性 (UnaryTypeTrait)

如果 T 为 const 限定类型(即 constconst volatile ),那么成员常量 value 等于 true。对于其它类型,value 等于 false

添加 std::is_conststd::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

参阅

检查类型是否为 volatile 限定
(类模板)
(C++17)
获得到其实参的 const 引用
(函数模板)