我的帖子开头有我感兴趣的问题:
Q1 :声明是否将一个或多个名称引入了表示类型的翻译单元?
Q2 :(如果 Q1 的回答是肯定的)编译器如何确定声明引入的名称类型?请考虑以下声明:
当我开始阅读c ++工作草案的第3条时,会出现这些问题。
实体是值,对象,引用,函数,枚举器,类型, 类成员,模板,模板特化,命名空间,参数 包装,或者这个。
名称是标识符的使用(2.11), operator-function-id(13.5),literal-operator-id(13.5.8),转换 function-id(12.3.2),或表示实体或的模板ID(14.2) 标签(6.6.4,6.1)。
List<Observer *> *_observers;
此声明将_observers
引入当前范围。我想了解编译器如何确定_observers
的类型?我对c++
规范中描述的正式算法很感兴趣。
答案 0 :(得分:1)
声明可以引入类型,函数,变量。
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.