这是典型的编程实践,把星号放在指针前面的名称

Is it typical programming practice to put the asterisk in the pointers right before the name?

本文关键字:指针 前面 编程 典型的      更新时间:2023-10-16

我已经这样做了一段时间了:

int* myIntPointer;
string* myString1,* myString2;

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

int *myIntPointer;
string  *myString1, *myString2;

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

后者更可取,这样可以理解指针不是在类上声明的,而是在变量上声明的。例如,string* myString1, myString2声明了一个指向字符串(myString1)和字符串(myString2)的指针。这种样式比string *myString1, *myString2的另一种样式更令人困惑。

这取决于你想把焦点放在哪里。我个人更喜欢typename* var_name,因为它是一个名为var_name的变量,类型为typename*。但是,如果这样做,当像这样定义多个变量时,可能会造成混淆:

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

短答:没关系。

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

无论你决定遵循什么约定,保持你的代码一致。一旦你选择了一个样式,那么你就应该处处遵循它。

如果你允许:

 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;

对于我来说,当指针位于左侧并紧挨着类型声明的其余部分时,更容易"看到"它。

我自己更喜欢第一个,因为我认为它更能显示你所声明的内容。这样做的缺点是在同一行上声明了几个指针。

int *p1, *p2;

更一致
int* p1, *p2;

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

int* p1;
int* p2;

如果你同时声明很多指针,这可能是一个问题。但是如果你同时需要很多指针,你可能应该考虑把它们放在一个向量或其他的解决方案中。如果函数或类中有许多已命名的指针,那么出现bug和错误的可能性就会更高。


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