Из любопытства я попробовал этот код, полученный в ответ на вопрос интервью[*]
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 ?
}
}