c ++中的名称和类型

时间:2014-05-03 04:52:05

标签: c++ types declaration names

我的帖子开头有我感兴趣的问题:

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++规范中描述的正式算法很感兴趣。

1 个答案:

答案 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.