2017-08-23 20 views
0

Si le code a entré une portée et défini un nouvel objet avec le même nom que l'objet extérieur, l'objet nouvellement défini sera-t-il correctement défini?
code ci-dessous montre:
Comment cela se produira-t-il lors de la construction d'un objet avec le même nom d'objet?

class ClassB 
{ 
    ClassA* p; 
    ClassB(ClassA* a) 
    { 
     p = NULL; 
     if (a != NULL) 
       p = a; 
    } 
}; 

ClassA x; 
if (some condition) 
{ 
    ClassB x(x); 
    // Will x->p be NULL or it will be pointer a? 
} 

Dans le cas champ, X-> NULL est ici ou?
Je peux voir dans gcc, ce sera NULL. Mais dans VS2015 il semble a.
Donc, ma question est ce que dit la norme pour cette partie. Merci beaucoup.

Répondre

0

Juste ne le faites pas. Le fait que vous devez demander ici et que la réponse n'est pas 100% évidente signifie que n'importe qui d'autre lisant au code sera également confus par lui. Comme une question purement académique, il est intéressant de savoir si cela fonctionnerait, mais dans n'importe quel vrai code, faites simplement ceci:

ClassA x; 
if (some condition) 
{ 
    ClassB y(&x); 
} 
+2

Je pense que la question était plutôt de savoir si le second x était initialisé comme int x {x}; sa valeur serait-elle la valeur du premier x ou sa valeur serait ce qu'elle était avant l'initialisation –

+0

@AndrewKashpur a tenté de corriger la réponse. Maintenant, c'est plutôt un commentaire, mais je vais juste le laisser à moins qu'il y ait trop de downvotes ... – user463035818