【问题标题】:Names and types in c++ [closed]C ++中的名称和类型[关闭]
【发布时间】:2014-05-03 04:52:05
【问题描述】:

我从我感兴趣的问题开始我的帖子:

Q1:声明是否在翻译单元中引入了一个或多个表示类型的名称?

Q2:(如果Q1的答案是肯定的)编译器如何确定声明引入的名称类型?考虑以下声明:

当我开始阅读 c++ 工作草案的第 3 条时,就会出现这个问题。

实体是值、对象、引用、函数、枚举器、类型、 类成员、模板、模板特化、命名空间、参数 包,或者这个。

名称是标识符的使用(2.11), operator-function-id (13.5),literal-operator-id (13.5.8),转换 function-id (12.3.2) 或 template-id (14.2),表示实体或 标签(6.6.4、6.1)。

List<Observer *> *_observers;

此声明将_observers 引入当前范围。我想了解编译器如何确定_observers 的类型?我对c++ 规范中描述的正式算法感兴趣。

【问题讨论】:

  • 不清楚你在问什么。标准中给出了类型的规范。标准中没有给出解析C++的算法。
  • 名称的每一种用法都在注明的章节编号中进行了描述,并包含在您从中复制发布文本的标准中。编译器如何实现这些使用定义和名称介绍完全取决于供应商;该标准没有提出这样的“算法”来实现这一点。
  • @MattMcNabb 你有规范的证明链接吗?
  • 证明是:extern int i;是一个声明。 i 是一种类型吗?
  • @user3521733 好的。那么实体 i 到底是什么意思呢?

标签: c++ types declaration names


【解决方案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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 2016-12-21
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多