Доступ к членам класса: раздел 3.4.5, пункт 2: точка из черновика N3290 C ++ - PullRequest
4 голосов
/ 29 августа 2011

Доступ к членам класса: раздел 3.4.5, пункт 2:

Если id-выражение в доступе к члену класса (5.2.5) является unqualified-id, а тип выражения объекта относится к классу типа C, неквалифицированный идентификатор ищется в области видимости класса C. Для вызова псевдо-деструктора (5.2.4) ищется безусловный идентификатор в контексте полного постфиксного выражения.

здесь в вышеприведенном утверждении: для вызова псевдодеструктора (5.2.4) безусловный идентификатор ищется в контексте полного выражения postfix-выражения.

Может ли кто-нибудь объяснить это в терминах программы (я знаю о вызове псевдодеструктора)?

1 Ответ

3 голосов
/ 29 августа 2011

Псевдо-деструктор - это деструктороподобный синтаксис, вызываемый для неклассного типа:

typedef int I;
I x;
x.I::~I();

Если бы это было проанализировано «наивно», то парсер увидел бы следующие токены:

безусловный идентификатор (x), имя типа (I), ::, побитовое отрицание, имя типа (I), (, ), ;.

«Побитовое отрицание» является проблемой, потому что если вы только что написали это:

~I();

Тогда это будет правильное выражение с другой семантикой. А именно такой же как ~0. Следовательно, приведенное выше выражение должно быть проанализировано по-разному для учета контекста псевдодеструктора.

...