Описание процесса поиска имени

247
06 февраля 2019, 06:10

Помогите описать процесс поиска имени х в последней строке фрагмента:

struct S { static int x; void f(); };
int S::x;
int x;
void S::f() { x; // <-- }
Answer 1

Неквалифицированное имя x в данном случае использовано в определении члена класса, располагающемся за пределами определения самого класса. При этом имя использовано после идентификатора определяемого члена класса (S::f в данном случае). В такой ситуации процесс поиска неквалифицированных имен описывается 6.4.1/8:

  1. Делается поиск вверх в том блоке, в котором использовано имя и далее в содержащих его блоках. (В данном случае ничего не находится)
  2. Делается поиск члена данного класса или члена его базового класса в соответствии с правилами 10.7. (Вот тут-то и находится член класса S::x)

Имя найдено, поиск закончен.

P.S. В 6.4.1/8 по ссылке приводится аналогичный, но более "навороченный" пример поиска неквалифицированного имени i с заходом в большее количество разнообразных областей видимости.

READ ALSO
Частота встречаемости делителей чисел

Частота встречаемости делителей чисел

Как наиболее быстро найти частоту встречаемости делителей у последовательности чисел (кроме делителя 1)? Например, для чисел 4,7,10,12 результатом...

273
Использования hexidecimal в коде

Использования hexidecimal в коде

Какой особый смысл в том, чтобы использовать hexidecimal, для определения значения переменных?

236
есть ли различия в подчёркиваниях? если да, то какие?

есть ли различия в подчёркиваниях? если да, то какие?

в чём различие в __cdecl и _cdecl или __fastcall и _fastcall или __asm и _asm и тд?

296
ошибка при чтении файла getline [c++] MS VS2010 [закрыт]

ошибка при чтении файла getline [c++] MS VS2010 [закрыт]

Появляется ошибка при чтении файла на getline в MS VS2010 появляется ошибка на while( ingetline(buf, 1024) ){ при чтении пустой строки, а именно при чтении символов...

275