【问题标题】:Why is p2 not a pointer type in declaration int* p1, p2;? [duplicate]为什么 p2 在声明 int* p1, p2; 中不是指针类型? [复制]
【发布时间】:2013-09-26 12:56:47
【问题描述】:
int* p1, p2;

根据 C++ 标准,p1 是指针,而 p2 不是。

我只是想知道为什么 C++ 标准不也将 p2 定义为指针?

我认为这样做是合理的。因为:

C++ 是一种强类型语言。也就是说,给定任何类型 T,声明 T t1, t2; 始终保证 t1t2 具有相同的类型。

但是,p1p2 没有相同类型的事实违反了规则,并且似乎违反直觉。

所以,我的问题是:制定这样一个违反直觉的规则的理由是什么?只是为了向后兼容?

【问题讨论】:

  • 这些关于“强类型”和“向后兼容性”的废话是什么?例如,能够在同一行定义一个 int 和一个指向 int 的指针有什么问题?
  • “一个 int 和一个指向 int 在同一行的指针”应该被认为是 ill-style。我想。
  • @xmllmx 您编写与类型名称而不是标识符相关的指针限定符的方式是一种病态,而是。出于这个确切原因,int *p 优于 int* p* 限定名称,而不是类型)。
  • 别那样做。每行声明多个变量被认为是不好的做法。如果您每行声明一个,这将不成问题。

标签: c++ c pointers types standards


【解决方案1】:

int 是基本类型,*& 是前缀说明符,也称为声明符运算符。这意味着* 对其后面的变量进行操作。它不是int 的修饰符。我想这就是原因。

【讨论】:

    【解决方案2】:

    对您没有多大帮助的简单答案是,这样做是为了向后兼容 C,它具有完全相同的语法来定义变量。该设计的基本原理必须来自 C 的创建者,而我真的不知道。

    我所知道的是,我在不同公司使用的大多数编码指南都禁止在同一个语句中定义多个变量,一旦你避免了这种情况,一切都变得易于阅读和维护。 C 和 C++ 中的声明语法并不是它们的强项之一,但它就是这样。

    【讨论】:

      猜你喜欢
      • 2015-05-15
      • 1970-01-01
      • 2018-03-26
      • 2015-03-01
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      相关资源
      最近更新 更多