Imaginons que j'ai un morceau de code comme celui-ci:

#include <iostream>

int main()
{

    int a = 5;
    {
        int a = 12;
        std::cout << a;
    }

    return 0;
}

Je veux cout a==5 hors du champ d'application, mais main::a ne fonctionne sûrement pas. Y a-t-il une solution de contournement?

5
yanpas 4 janv. 2016 à 20:27

2 réponses

Meilleure réponse

Une solution de contournement (disons):

int main()
{

    int a = 5;
    int *pa = &a;
    {
        int a = 12;
        std::cout << (*pa);
    }

    return 0;
}

Alternativement,

int main()
{

    int a = 5;
    int& ra = a;
    {
        int a = 12;
        std::cout << ra;
    }

    return 0;
}
4
Zac Howland 5 janv. 2016 à 18:35

Une alternative, c'est similaire à ilya answer mais sans polluer le périmètre parent

int main() {
  int a = 1;
  {
    int& outer_a = a;
    int a = 2;
    std::cout << outer_a;
  }
}
1
Edwin Rodríguez 5 janv. 2016 à 18:43