Переопределение переменных C ++ в области видимости - PullRequest
0 голосов
/ 26 апреля 2018

Прошло много времени с тех пор, как я написал C ++. Как это возможно, что приведенный ниже код компилируется в C ++ 14 даже без предупреждения?

int x = 0;
if (true) {
    int x = 2;
}

Компилятор:

gcc (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Флаги:

CXX_FLAGS =  -std=c++14 -Wall -fno-builtin-malloc -fno-builtin-calloc -fno- 
builtin-realloc -fno-builtin-free -O3 -DNDEBUG -march=native -I ${INCLUDES}

1 Ответ

0 голосов
/ 26 апреля 2018

Объявление переменной в более узкой области с тем же именем, что и во внешней области, всегда является функцией C ++. Иногда это может быть полезно.

Некоторые компиляторы предупреждают вас, но если они следуют стандарту C ++, они не должны выдавать ошибку.

Такие языки, как Java, запрещают это, но это может раздражать, особенно при перемещении блоков кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...