Я начинаю свой пост с интересующих меня вопросов:
Q1: Правда ли, что объявление ввело одно или несколько имен в единицу перевода, которые обозначают тип?
Q2: (Если ответишь за Q1 является положительным) Как компилятор определяет тип имени, введенного объявлением? Рассмотрим следующую декларацию:
Этот вопрос появляется, когда я начал читать 3-е предложение рабочего проекта c ++.
Сущность — это значение, объект, ссылка, функция, перечислитель, тип,
член класса, шаблон, специализация шаблона, пространство имен, параметр
упаковать или это.Имя — это использование идентификатора (2.11),
идентификатор оператора-функции (13.5), идентификатор оператора-литерала (13.5.8), преобразование
идентификатор функции (12.3.2) или идентификатор шаблона (14.2), который обозначает объект или
ярлык (6.6.4, 6.1).
List<Observer *> *_observers;
Эта декларация введена _observers
в текущем объеме. Я хочу понять, как компилятор определяет тип _observers
? Я заинтересован в формальном алгоритме, описанном в c++
спекуляция
Объявление может вводить тип, функцию, переменную.
class A; // This declares a type, A
A* aPtr; // This declares a variable, aPtr
// The type of aPtr is A*
A foo(); // This declares a function, foo.
В твоем случае,
List<Observer*> *_Observers; // Declares a variable, _observers.
// The type of _observers is List<Observer*>*.
// For this to be a valid declarion, the types List,
// a class template, and Observer must be known
// (declared or defined) before the
// variable declaration.