Сокрытие имени переменной int в c++

Из любопытства я попробовал этот код, полученный в ответ на вопрос интервью[*]

int main(int argc, char *argv[])
{
    int a = 1234;
    printf("Outer: %d\n", a);
    {
        int a(a);
        printf("Inner: %d\n", a);
    }
}

При компиляции в Linux (и g++ 4.6.3, и clang++ 3.0) он выводит:

Outer: 1234
Inner: -1217375632

Однако на Windows (VS2010) печатает:

Outer: 1234
Inner: 1234

Логика заключается в том, что до тех пор, пока копирующий конструктор второй переменной 'a' не завершится, первая переменная 'a' все еще будет доступна. Однако я не уверен, является ли это стандартным поведением или просто (другой) причудой Microsoft.

Есть идеи?

[*] Фактический вопрос был следующим:

Как бы вы инициализировали переменную внутри области со значением переменной с таким же именем в содержащей области без использования временной или глобальной переменной?

{
    // Not at global scope here
    int a = 1234;
    {
        int a;
        // how do you set this a to the value of the containing scope a ?
    }
}
7
задан rippeltippel 23 May 2012 в 16:25
поделиться