◐ Shell
clean mode source ↗

const_cast conversion - cppreference.com

Da cppreference.com.

Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.

La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui.

Click here for the English version of this page

<metanoindex/>

Converte tra i tipi con diverse cv-qualificazione.

Original:

Converts between types with different cv-qualification.

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

Sintassi

const_cast < new_type > ( expression )

Restituisce un valore di tipo new_type.

Original:

Returns a value of type new_type.

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

Spiegazione

Solo le seguenti conversioni può essere fatto con const_cast. In particolare, solo const_cast può essere utilizzato per buttar via (rimuovere) constness o volatilità.

Original:

Only the following conversions can be done with const_cast. In particular, only const_cast may be used to cast away (remove) constness or volatility.

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

1)

Due puntatori eventualmente multilivello stesso tipo possono essere convertiti tra loro, indipendentemente CV-qualificazione ad ogni livello.

Original:

Two possibly multilevel pointers to the same type may be converted between each other, regardless of cv-qualifiers at each level.

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

2)

lvalue di qualsiasi tipo T può essere convertito in un riferimento lvalue o rvalue al T stesso tipo, più o meno cv qualificati. Allo stesso modo, un rvalue può essere convertito in un più o meno cv qualificati riferimento rvalue.

Original:

lvalue of any type T may be converted to a lvalue or rvalue reference to the same type T, more or less cv-qualified. Likewise, an rvalue may be converted to a more or less cv-qualified rvalue reference.

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

3)

Le stesse regole si applicano ai puntatori eventualmente multilivello ai membri di dati.

Original:

Same rules apply to possibly multilevel pointers to data members.

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

4)

valore di puntatore nullo può essere convertito nel valore di puntatore nullo new_type

Original:

null pointer value may be converted to the null pointer value of new_type

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

Come con tutti espressioni cast, il risultato è:

Original:

As with all cast expressions, the result is:

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

  • un lvalue se new_type è un tipo di riferimento o un riferimento lvalue rvalue un funzionamento tipo;

    Original:

    an lvalue if new_type is an lvalue reference type or an rvalue reference to function type;

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

  • un xValue se new_type è un riferimento rvalue per tipo di oggetto;

    Original:

    an xvalue if new_type is an rvalue reference to object type;

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

  • un prvalue altrimenti.

    Original:

    a prvalue otherwise.

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

Note

Puntatori a funzioni e puntatori a funzioni membro non sono soggetti a const_cast

Original:

Pointers to functions and pointers to member functions are not subject to const_cast

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

Anche se const_cast può rimuovere constness da qualsiasi puntatore o un riferimento, utilizzando il puntatore risultante o il riferimento a scrivere a un oggetto che è stato dichiarato const richiama un comportamento indefinito.

Original:

Even though const_cast may remove constness from any pointer or reference, using the resulting pointer or reference to write to an object that was declared const invokes undefined behavior.

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

Parole chiave

const_cast

Esempio

#include <iostream>

struct type {
    type() :i(3) {}
    void m1(int v) const {
        // this->i = v;                 // compile error: this is a pointer to const
        const_cast<type*>(this)->i = v; // OK
    }
    int i;
};

int main() 
{
    int i = 3;                    // i is not declared const
    const int& cref_i = i; 
    const_cast<int&>(cref_i) = 4; // OK: modifies i
    std::cout << "i = " << i << '\n';

    type t;
    t.m1(4);
    std::cout << "type::i = " << t.i << '\n';

    const int j = 3; // j is declared const
    int* pj = const_cast<int*>(&j);
    *pj = 4;         // undefined behavior!

    void (type::*mfp)(int) const = &type::m1; // pointer to member function
//  const_cast<void(type::*)(int)>(mfp); // compiler error: const_cast does not
                                         // work on function pointers
}

Output:

Vedi anche