◐ Shell
clean mode source ↗

std::integral_constant — cppreference.com

De cppreference.com

<metanoindex/>

<tbody> </tbody>

Déclaré dans l'en-tête

<type_traits>

template< class T, T v > struct integral_constant;

(depuis C++11)

std::integral_constant encapsule une constante statique du type spécifié. Il s'agit de la classe de base pour les caractères de C + + .

Original:

std::integral_constant wraps a static constant of specified type. It is the base class for the C++ type traits.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Deux spécialisations pour la bool type sont fournis:

Original:

Two specializations for the type bool are provided:

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Defined in header <type_traits>

Type d'

Original:

Type

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Definition
true_type std::integral_constant<bool, true>
false_type std::integral_constant<bool, false>

Types de membres

Type d'

Original:

Type

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Definition
value_type T
type std::integral_constant<T,v>

Constantes membres

Nom

Original:

Name

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Value
value

statique expression constante de type avec T v valeur

Original:

static constant expression of type T with value v

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Fonctions membres

convertit l'objet en value_type, retourne value

Original:

converts the object to value_type, returns value

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.


(fonction membre publique)

Mise en œuvre possible

template<class T, T v>
struct integral_constant {
    static constexpr T value = v;
    typedef T value_type;
    typedef integral_constant type;
    constexpr operator value_type() const { return value; }
};

Exemple

#include <iostream>
#include <type_traits>

int main() 
{
    typedef std::integral_constant<int, 2> two_t;
    typedef std::integral_constant<int, 4> four_t;

//  static_assert(std::is_same<two_t, four_t>::value,
//                "two_t and four_t are not equal!"); 
//  error: static assertion failed: "two_t and four_t are not a same types"

    static_assert(two_t::value*2 == four_t::value,
       "2*2 != 4"
    );

    enum class my_e {
       e1,
       e2
    };
    typedef std::integral_constant<my_e, my_e::e1> my_e_e1;
    typedef std::integral_constant<my_e, my_e::e2> my_e_e2;

//  static_assert(my_e_e1::value == my_e::e2,
//               "my_e_e1::value != my_e::e2");
//  error: static assertion failed: "my_e_e1::value != my_e::e2"

    static_assert(std::is_same<my_e_e2, my_e_e2>::value,
                  "my_e_e2 != my_e_e2");
}