这是典型的编程实践,把星号放在指针前面的名称
Is it typical programming practice to put the asterisk in the pointers right before the name?
我已经这样做了一段时间了:
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和错误的可能性就会更高。
总之,我认为这只是个人喜好的问题。像大多数编码风格主题一样,唯一重要的是它的一致性。随着时间的推移,你会习惯任何编码风格。
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 表观调用前面的表达式必须具有指向 func 类型的指针
- 声明并初始化指针后,何时在变量文本前面加上星号,何时不作为前缀
- 这是典型的编程实践,把星号放在指针前面的名称
- 指针值似乎受到其前面的值的影响