我已经做了一段时间了:
int* myIntPointer;
string* myString1,* myString2;
但是我注意到很多人这样做了:
int *myIntPointer;
string *myString1, *myString2;
哪一个更常见?或者至少是一个很好的编程实践。
答案 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;
如果要同时声明大量指针,这可能会出现问题。但是如果你需要同时使用大量的指针,你应该考虑将它们放在矢量或其他解决方案中。具有大量命名指针的函数或类可能会有更高的错误和错误。
总而言之,我认为这只是一个偏好问题。像大多数编码风格主题一样,唯一重要的是它是一致的。随着时间的推移,你会习惯任何编码风格。