名前空間
変種
操作

std::is_const

提供: cppreference.com
< cpp‎ | types
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
型サポート
型の性質
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以上)

T が const 修飾された型 (つまり const または const volatile) であれば、 true に等しいメンバ定数 value が提供されます。 それ以外の型に対しては、 valuefalse です。

is_const または is_const_v (C++17以上) に対して特殊化を追加するプログラムは未定義です。

目次

[編集] テンプレート引数

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 になります。 参照型かもしれない型の const 性を確認するには、参照を除去して 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 修飾されているかどうか調べます
(クラステンプレート) [edit]
(C++17)
引数への const な参照を取得します
(関数テンプレート) [edit]