2

I've been doing this for a while:

int* myIntPointer;
string* myString1,* myString2;

But I've noticed a lot of people do this:

int *myIntPointer;
string  *myString1, *myString2;

Which one is more common? Or at least a good programming practice.

4

5 回答 5

5

后者更可取,以便人们了解指针不是在类上声明的,而是在变量上声明的。例如,string* myString1, myString2声明指向字符串 ( myString1) 和字符串 ( myString2) 的指针。这种风格比string *myString1, *myString2.

于 2013-05-10T21:10:14.430 回答
3

这取决于你想把重点放在什么地方。我个人更喜欢typename* var_name,因为它是一个以var_name类型命名的变量typename*。但是如果你这样做,当多个变量被这样定义时,你可能会感到困惑:

typename* a, b, c, d; // b, c, d are not of a pointer type
于 2013-05-10T21:10:35.303 回答
2

如果您允许:

 int *myIntPointer

而不是:

 int* myIntPointer

... 然后 C++ 编译器仍然允许在同一行声明非指针和指针,这是非常糟糕的做法:

//BAD PRACTICE: Variables of different types on the same line
//It is easy to miss the asterisk if different types are used,
//and is still legal (allowed)
int *p1, i1;
i1 = 5;
p1 = &i1;

当指针位于左侧并且与类型声明的其余部分相邻时,(对我而言)更容易“看到”指针。

于 2013-05-10T21:19:52.077 回答
2

我自己更喜欢第一个,因为我认为它更好地显示了您所声明的内容。这样做的坏处是当您在同一行上声明多个指针时。

int *p1, *p2;

int* p1, *p2;

但我倾向于总是在同一行声明(并在可能的情况下初始化)我的变量。所以我会写

int* p1;
int* p2;

如果您同时声明大量指针,这可能是个问题。但是,如果您同时需要大量指针,您可能应该考虑将它们放入向量或其他解决方案中。具有大量命名指针的函数或类可能会有更高的错误和错误机会。


总而言之,我认为这只是一个偏好问题。像大多数编码风格主题一样,唯一重要的是它是一致的。随着时间的推移,你会习惯任何编码风格。

于 2013-05-10T21:20:36.623 回答
2

简短的回答: 没关系。

长答案:作为 C++ 程序员,(首先,我通常尽量避免使用指针,但是)我习惯于让星号更接近类型,因为它是类型定义的一部分(int* p声明一个类型的指针int*),我几乎从不在同一行声明更多变量。

无论您决定遵循何种约定,请保持您的代码一致。一旦你选择了要遵循的风格,就随处遵循。

于 2013-05-10T21:10:51.603 回答