La partie intéressante, manque de la question est le type de a
. Je peux juste supposer que c'est une sorte de pointeur (cela peut être n'importe quoi, mais cette hypothèse rend la discussion plus simple).
T *a;
char* p = "Hello";
reinterpret_cast<char*&>(a) = p;
Dans l'hypothèse où a
est en fait un pointeur à un autre type, le résultat de l'opération serait équivalent à:
T *a;
char *p = "Hello";
a = reinterpret_cast<T*>(p); // convert p to a T* and assign
la différence étant que dans la première version, la distribution est étant effectué sur le côté gauche (LHS) de l'affectation et doit donc être un cast à une référence (lvalue), tandis que dans le second cas, la distribution est effectuée sur le côté droit (RHS) et donc un rvalue suffit et là n'est pas nécessaire de lancer à une référence.
Maintenant, dans le cas général, il y a des différences dans les deux castes. Réinterpréter la distribution réinterprétera simplement la mémoire comme le type que vous lui donnez. Si le type a
et char*
sont de la même taille (ce qui, selon l'hypothèse ci-dessus, est valable, tous les pointeurs ont la même taille), alors les deux opérations sont identiques et donnent le même résultat. Par contre, si un type est plus grand que l'autre alors les deux opérations ne sont pas équivalentes. Si sizeof(a) > sizeof(char*)
la première version va réinterpréter la variable et remplacer uniquement les premiers sizeof(char*)
octets de a
avec la valeur de p
.Dans le second cas, il lira sizeof(a)
octets à partir de l'emplacement de mémoire de p
(provoquant un comportement indéfini, car il lira au-delà de la variable) et copiera ces octets en écrasant tous les octets précédents en a
.
Le contraire va se sizeof(a) < sizeof(char*)
alors la première version écrasera au-delà de l'espace alloué pour a
provoquant un comportement non défini, tandis que le second remplacera a
avec les premiers sizeof(a)
octets dans p
.
Pouvez-vous poster le type de cp? – JaredPar
@Jared: Probablement 'char *', ou cela ne fonctionnerait pas. – GManNickG
Le type n'a pas d'importance si j'ai mis à jour l'exemple. – vehomzzz