Идентификатор, объявленный во внутренней области, не должен скрывать идентификатор, объявленный во внешней области
Идентификатор, объявленный во внутренней области, не должен скрывать идентификатор, объявленный во внешней области.
Правило помечает ситуации, когда одно и то же имя идентификатора используется в двух объявлениях переменных, одно во внешней области, а другое во внутренней области.
int var;
...
{
...
int var;
...
}Все виды использования имени во внутренней области относятся к переменной, объявленной во внутренней области. Однако разработчик или рецензент кода может ошибочно предположить, что использование относится к переменной, объявленной во внешней области. Во всех случаях, отмеченных этим правилом, невозможно уточнить использование с помощью оператора разрешения области.
Средство проверки правил помечает все случаи затенения переменных, за исключением следующих случаев:
Такое же имя идентификатора используется во внешнем и внутреннем именованных пространствах имен.
Это имя используется для элемента данных класса и переменной вне класса.
То же имя используется для метода в базовом и производном классе.
Средство проверки помечает даже те случаи, когда объявление переменной во внешней области имеет место после объявления переменной во внутренней области. В этих случаях, хотя скрытие переменной не происходит, повторное использование имени переменной может вызвать путаницу разработчика.
Правило не помечает эти ситуации, поскольку можно уточнить, относится ли использование переменной к переменной во внутренней или внешней области. Например, в этом примере:
int var;
namespace n1 {
int var;
}n1, вы можете сослаться на переменную во внутренней области как n1::var и глобальная переменная как ::var.Средство проверки правил также не обнаруживает следующие проблемы:
Переменная в безымянном пространстве имен скрывает другую переменную во внешней области.
Переменная, локальная к лямбда-выражению, скрывает захваченную переменную.
Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: идентификаторы |
| Категория: Обязательно, Автоматизировано |