reinterpret_cast conversion
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. |
Converte tra i tipi reinterpretando il modello sottostante po '.
Original:
Converts between types by reinterpreting the underlying bit pattern.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica] Sintassi
reinterpret_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.
You can help to correct and verify the translation. Click here for instructions.
[modifica] Spiegazione
A differenza di static_cast, ma come const_cast, l'espressione reinterpret_cast non compilare in tutte le istruzioni della CPU. E 'puramente una direttiva del compilatore, che indica al compilatore di trattare la sequenza di bit (rappresentazione dell'oggetto) di expression come se avesse il tipo new_type.
Original:
Unlike static_cast, but like const_cast, the reinterpret_cast expression does not compile to any CPU instructions. It is purely a compiler directive which instructs the compiler to treat the sequence of bits (object representation) of expression as if it had the 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.
You can help to correct and verify the translation. Click here for instructions.
Solo le seguenti conversioni può essere fatto con reintepret_cast, tranne quando tali conversioni avrebbe gettato via constness''' o volatilità.
Original:
Only the following conversions can be done with reintepret_cast, except when such conversions would cast away 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.
You can help to correct and verify the translation. Click here for instructions.
1)
Un'espressione di integrale, enumerazione, puntatore, o puntatore-a-membro del tipo può essere convertito in proprio tipo. Il valore risultante è uguale al valore di
expression
. (dal C++11)Original:
An expression of integral, enumeration, pointer, or pointer-to-member type can be converted to its own type. The resulting value is the same as the value of
expression
. (dal C++11)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
2)
Qualsiasi puntatore può essere convertito in qualsiasi tipo integrale sufficiente a contenere il valore del puntatore (ad es std::uintptr_t)
Original:
Any pointer can be converted to any integral type large enough to hold the value of the pointer (e.g. to std::uintptr_t)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
3)
Un valore di qualsiasi tipo integrale o enumerazione può essere convertito in un tipo di puntatore. Un puntatore convertito in un numero intero di dimensioni sufficienti e torna al tipo di puntatore stesso è garantito per avere il suo valore originale, altrimenti il puntatore risultante non può essere dereferenziati sicuro. Il NULL puntatore nullo costante o zero integer non è garantito per produrre il valore di puntatore nullo del tipo di destinazione; static_cast o <div class="t-tr-text">conversione implicita
deve essere utilizzato per questo scopo.Original:
implicit conversion
The text has been machine-translated via [http://translate.google.com Google Translate].
You can help to correct and verify the translation. Click [http://en.cppreference.com/w/Cppreference:MachineTranslations here] for instructions.
You can help to correct and verify the translation. Click [http://en.cppreference.com/w/Cppreference:MachineTranslations here] for instructions.
Original:
A value of any integral or enumeration type can be converted to a pointer type. A pointer converted to an integer of sufficient size and back to the same pointer type is guaranteed to have its original value, otherwise the resulting pointer cannot be dereferenced safely. The null pointer constant NULL or integer zero is not guaranteed to yield the null pointer value of the target type; static_cast or
conversione implicita</div> should be used for this purpose.
Original:
implicit conversion
The text has been machine-translated via [http://translate.google.com Google Translate].
You can help to correct and verify the translation. Click [http://en.cppreference.com/w/Cppreference:MachineTranslations here] for instructions.
You can help to correct and verify the translation. Click [http://en.cppreference.com/w/Cppreference:MachineTranslations here] for instructions.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
4)
Qualsiasi valore di std::nullptr_t tipo, compresi nullptr può essere convertito in qualsiasi tipo integrale, come se fosse (void*)0, ma nessun valore, nemmeno nullptr può essere convertito std::nullptr_t: static_cast deve essere utilizzato per questo scopo. (dal C++11)
Original:
Any value of type std::nullptr_t, including nullptr can be converted to any integral type as if it was (void*)0, but no value, not even nullptr can be converted to std::nullptr_t: static_cast should be used for that purpose. (dal C++11)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
5)
Qualsiasi puntatore a oggetto di
T1
tipo può essere convertito a puntatore a oggetto di un altro tipo T2
. Se l'allineamento T2
requisito non è più rigoroso di T1
, la conversione del puntatore conseguente alle sue rese tipi di originale il valore originale, in caso contrario il puntatore risultante non può essere dereferenziato in modo sicuro. In ogni caso, il puntatore risultante può essere dereferenced sicuro se consentito dalle norme di aliasing di tipo' (vedi sotto) Original:
Any pointer to object of type
T1
can be converted to pointer to object of another type T2
. If T2
's alignment requirement is not stricter than T1
's, conversion of the resulting pointer back to its original type yields the original value, otherwise the resulting pointer cannot be dereferenced safely. In any case, the resulting pointer may only be dereferenced safely if allowed by the type aliasing rules (see below) The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
6)
Un'espressione lvalue di
T1
tipo può essere convertito per fare riferimento a un altro tipo T2
. Il risultato è un lvalue o riferimento all'oggetto stesso dell'originale lvalue, ma con un diverso tipo xValue. Nessun temporaneo viene creato, nessuna copia è fatta, non costruttori o funzioni di conversione sono chiamati. Il riferimento risultante è accessibile solo in modo sicuro se consentito dalle norme di aliasing di tipo' (vedi sotto)Original:
An lvalue expression of type
T1
can be converted to reference to another type T2
. The result is an lvalue or xvalue referring to the same object as the original lvalue, but with a different type. No temporary is created, no copy is made, no constructors or conversion functions are called. The resulting reference can only be accessed safely if allowed by the type aliasing rules (see below)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
7)
Qualsiasi puntatore a funzione può essere convertito in un puntatore a una funzione di tipo diverso. Chiamare la funzione tramite un puntatore a un tipo di funzione diverso è indefinito, ma la conversione puntatore tali messaggi ai puntatore al tipo di funzione originale cede il puntatore alla funzione originale.
Original:
Any pointer to function can be converted to a pointer to a different function type. Calling the function through a pointer to a different function type is undefined, but converting such pointer back to pointer to the original function type yields the pointer to the original function.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
8)
In alcune implementazioni (in particolare, su qualsiasi sistema compatibile POSIX), un puntatore a funzione può essere convertito in un puntatore all'oggetto o viceversa. Se l'applicazione supporta la conversione in entrambe le direzioni, la conversione al tipo originale fornisce il valore originale, in caso contrario il puntatore risultante non può essere chiamato in modo sicuro o dereferenziato.
Original:
On some implementations (in particular, on any POSIX compatible system), a function pointer can be converted to an object pointer or vice versa. If the implementation supports conversion in both directions, conversion to the original type yields the original value, otherwise the resulting pointer cannot be dereferenced or called safely.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
9)
Il valore del puntatore nullo qualsiasi tipo di puntatore può essere convertito in qualsiasi altro tipo di puntatore, causando il valore del puntatore nullo di quel tipo. Notare che il nullptr puntatore nullo costante o qualsiasi altro valore di std::nullptr_t tipo non può essere convertito in un puntatore con reinterpret_cast: conversione implicita o static_cast deve essere utilizzato per questo scopo.
Original:
The null pointer value of any pointer type can be converted to any other pointer type, resulting in the null pointer value of that type. Note that the null pointer constant nullptr or any other value of type std::nullptr_t cannot be converted to a pointer with reinterpret_cast: implicit conversion or static_cast should be used for this purpose.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
10)
Un puntatore alla funzione membro rvalue può essere convertito in un puntatore a funzione membro diverso di tipo diverso. Conversione al tipo originale produce il valore originale, altrimenti il puntatore risultante non può essere utilizzato in modo sicuro.
Original:
An rvalue pointer to member function can be converted to pointer to a different member function of a different type. Conversion to the original type yields the original value, otherwise the resulting pointer cannot be used safely.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
11)
Un puntatore rvalue di opporsi membro di qualche
T1
classe può essere convertito in un puntatore a un altro oggetto membro di un altro T2
classe. Se l'allineamento T2
non è più rigoroso T1
, la conversione delle rese tipo originali il valore originale, altrimenti il puntatore risultante non può essere utilizzato in modo sicuro.Original:
An rvalue pointer to member object of some class
T1
can be converted to a pointer to another member object of another class T2
. If T2
's alignment is not stricter than T1
's, conversion to the original type yields the original value, otherwise the resulting pointer cannot be used safely.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
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.
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.
[modifica] Parole chiave
[modifica] Digitare aliasing
Quando un puntatore o un riferimento a un oggetto di tipo
T1
è reintrepret_cast
(o C-style cast) a un puntatore o riferimento a oggetto di un T2
tipo diverso, il cast riesce sempre, ma il puntatore risultante o di riferimento può accedere solo se uno dei delle seguenti condizioni:Original:
When a pointer or reference to object of type
T1
is reintrepret_cast
(or C-style cast) to a pointer or reference to object of a different type T2
, the cast always succeeds, but the resulting pointer or reference may only be accessed if one of the following is true:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
- T2 è il tipo (possibilmente cv-qualificata) dinamica dell'oggettoOriginal:T2 is the (possibly cv-qualified) dynamic type of the objectThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- T2 e T1 sono entrambi (possibilmente multi-livello, possibilmente cv-qualificato a ciascun livello) puntatori al (dal C++11) stesso tipo T3Original:T2 and T1 are both (possibly multi-level, possibly cv-qualified at each level) pointers to the same type T3 (dal C++11)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- T2 è la variante (forse cv-qualificata) con o senza segno di tipo dinamico dell'oggettoOriginal:T2 is the (possibly cv-qualified) signed or unsigned variant of the dynamic type of the objectThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- T2 è un tipo di aggregazione o di un tipo di unione che contiene uno dei tipi di cui sopra come membro elemento o non statici (tra cui, in modo ricorsivo, elementi di aggregazioni secondarie e non-membri dati statici dei sindacati contenuti): questo lo rende sicuro per lanciare dal primo membro di una struttura e da un elemento di unione per l'unione struct / che contiene.Original:T2 is an aggregate type or a union type which holds one of the aforementioned types as an element or non-static member (including, recursively, elements of subaggregates and non-static data members of the contained unions): this makes it safe to cast from the first member of a struct and from an element of a union to the struct/union that contains it.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- T2 è un (forse cv-qualificata) classe di base di tipo dinamico dell'oggettoOriginal:T2 is a (possibly cv-qualified) base class of the dynamic type of the objectThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- T2 is char or unsigned char
Se T2 non soddisfa questi requisiti, l'accesso all'oggetto attraverso il nuovo puntatore o un riferimento richiama un comportamento indefinito. Questo è noto come il rigoroso aliasing regola e si applica sia C + + e linguaggi di programmazione C.
Original:
If T2 does not satisfy these requirements, accessing the object through the new pointer or reference invokes undefined behavior. This is known as the strict aliasing rule and applies to both C++ and C programming languages.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[modifica] Esempio
Viene illustrato alcuni utilizzi di reinterpret_cast:
Original:
Demonstrates some uses of reinterpret_cast:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <cstdint> #include <cassert> #include <iostream> int f() { return 42; } int main() { int i = 7; // pointer to integer and back uintptr_t v1 = reinterpret_cast<uintptr_t>(&i); // static_cast is an error std::cout << "The value of &i is 0x" << std::hex << v1 << '\n'; int* p1 = reinterpret_cast<int*>(v1); assert(p1 == &i); // pointer to function to another and back void(*fp1)() = reinterpret_cast<void(*)()>(f); // fp1(); undefined behavior int(*fp2)() = reinterpret_cast<int(*)()>(fp1); std::cout << std::dec << fp2() << '\n'; // safe // type aliasing through pointer char* p2 = reinterpret_cast<char*>(&i); if(p2[0] == '\x7') std::cout << "This system is little-endian\n"; else std::cout << "This system is big-endian\n"; // type aliasing through reference reinterpret_cast<unsigned int&>(i) = 42; std::cout << i << '\n'; }
Output:
The value of &i is 0x7fff352c3580 42 This system is little-endian 42
[modifica] Vedi anche
const_cast conversione | aggiunge o rimuove const
Original: adds or removes const The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
static_cast conversione | esegue conversioni di base
Original: performs basic conversions The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
dynamic_cast conversione | esegue conversioni controllato polimorfici
Original: performs checked polymorphic conversions The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |