【问题标题】:what is the role of the comma in below statements?逗号在以下语句中的作用是什么?
【发布时间】:2016-11-02 09:47:28
【问题描述】:

当我在 C/C++ 中想到这种语法时,目前正在阅读 PETSc:

PetscInt i, n = 10, col[3], its;
PetscScalar neg_one = -1.0, one = 1.0, value[3];

我不明白这里逗号的含义。它与元组有关吗?还是有什么超载的?

【问题讨论】:

  • 如果你认为PetscInt i,n = 10,col[3],its;(PetscInt i,n) = (10,col[3],its); 一样,那就错了。它实际上是PetscInt i,(n = 10),col[3],its;= 10 用于初始化n

标签: c++ c syntax petsc


【解决方案1】:

这只是声明了多个相同类型的变量。

好像

int a, b;

第一行声明了四个PetscInt 类型的变量,分别称为in(初始化为10)、数组col[3],最后是its。第二行声明了三个PetscScalar 类型的变量。

所以这个:

PetscInt i,n = 10,col[3],its;

等同于:

PetscInt i;
PetscInt n = 10;
PetscInt col[3];
PetscInt its;

有些人发现原始方式更短、更容易输入,而且也很好,因为它表明变量共享(部分)相同类型。有些人觉得它令人困惑和/或容易出错,这当然是主观的,但我觉得我应该提到它来激励你为什么经常发现这样的代码。

【讨论】:

  • 糟糕...我实际上多次使用该语法,但在语句中没有看到它,因为由于布局,我将它与 Python 的元组赋值混淆了。他们最好写PetscInt i, n=10, col[3], its;
  • 还值得一提的是,当有人执行 int a, b=5; 之类的操作然后误读为 a=5 时,它可能是常见的错误来源。
  • 不幸的是他们不共享类型,他们共享一个类型说明符。如果它们确实具有相同的类型,那么在声明多个指针和/或数组时,这样的声明就不会容易出错。
  • @2501 我尝试添加其他观点并明确表示这是主观的。
【解决方案2】:

这里的逗号只是为了在一行语句中声明多个相同类型的变量。你可以把它们分成单独的一行,每一行,比如

PetscInt i;
PetscInt n = 10;
PetscInt col[3];
PetscInt its;

虽然两者都是有效且正确的语法,但我们中的一些人还是更喜欢使用广泛的版本,因为它提供了更好的可读性 (恕我直言) 并避免在使用指针类型或存储时出现任何可能的混淆- 与类型关联的类说明符。

例如,对于速记

int * p, q;

一样
int *p;
int q;   //not int *q

q 不是那里的指针类型。

【讨论】:

  • 值得指出的是,应该始终使用这种样式。在同一行声明多个变量是严重错误的众所周知的来源,尤其是在涉及指针时。同时,代码变得更易于阅读。
  • @Lundin 我确实同意你的观点,先生,但问题是,以前我被指责“将我的个人意见“推给”其他人做同样的事情 [ :( ],所以我没有“建议” 这次。希望这不会对帖子产生负面影响,对吧?
  • @Lundin 但是,我已经扩展了一些,试图将“基于意见”的内容保持在最少,这有什么好处吗?
  • 我认为指出语法的危险是完全可以的。如果这太过于基于意见,那么 Stack Overflow 肯定会发疯 ;-)
  • 我认为答案很好,我只是将评论作为推荐做法留给阅读本文的任何人。
猜你喜欢
  • 1970-01-01
  • 2023-04-03
  • 2019-09-29
  • 1970-01-01
  • 2011-07-17
  • 2017-12-26
  • 1970-01-01
  • 2018-03-12
  • 2011-08-15
相关资源
最近更新 更多