将星号放在名称前面的指针中是典型的编程习惯吗?

时间:2013-05-10 21:06:39

标签: c++ c pointers types

我已经做了一段时间了:

int* myIntPointer;
string* myString1,* myString2;

但是我注意到很多人这样做了:

int *myIntPointer;
string  *myString1, *myString2;

哪一个更常见?或者至少是一个很好的编程实践。

5 个答案:

答案 0 :(得分:5)

后者是优选的,以便人们理解指针不是在类上声明,而是在变量上声明。例如,string* myString1, myString2声明指向字符串(myString1)和字符串(myString2)的指针。这种风格比string *myString1, *myString2的替代风格更令人困惑。

答案 1 :(得分:3)

这取决于您想要关注的内容。我个人更喜欢typename* var_name,因为它是var_name类型的typename*变量。但是如果你这样做,当多个变量定义如下时,你会有混淆的风险:

typename* a, b, c, d; // b, c, d are not of a pointer type

答案 2 :(得分:2)

简短回答: 没关系。

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

无论您决定遵循什么约定, 保持代码一致 。一旦选择了要遵循的风格,请随处跟随。

答案 3 :(得分: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;

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

答案 4 :(得分:2)

我自己更喜欢第一个,因为我觉得它更能说明你宣称的是什么。关于这一点的坏处是当你在同一行上声明几个指针时。

int *p1, *p2;

更为一致
int* p1, *p2;

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

int* p1;
int* p2;

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


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