2

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

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

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

4

2 回答 2

12

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

就像是

int a, b;

第一行声明了 4 个类型的变量PetscInt,称为i, n(初始化为10)、数组col[3]和 finally its。第二行声明了三个类型的变量PetscScalar

所以这:

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

是相同的:

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

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

于 2016-11-02T09:48:12.277 回答
4

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

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

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

例如,对于速记

int * p, q;

是相同的

int *p;
int q;   //not int *q

q不是那里指针类型。

于 2016-11-02T09:49:21.537 回答