【发布时间】:2020-05-25 01:42:20
【问题描述】:
有谁知道为什么 Stroustrup 的风格是指针的放置方式如下?具体来说,Stroustrup 就此事提供了哪些指导?
int* p;
对
int *p;
因为声明多个变量需要在每个变量名称旁边加上星号。这将导致:
int* p, *x;
对
int *p, *x;
在 K&R C 书中,他们解释说星号/指针用作助记符以帮助理解。我觉得奇怪的是指针/星号与类型相关,而不是变量,如每个示例的第二个所示。如果有关于为什么选择第一种样式的背景知识。
希望从 Stroustrup 那里得到一些引述。
我在 K&R C 第 2 版语法第 235 页中添加了星号(指针)与作为标识符的声明符相关联的位置。
回答 在这个article from Stroustrup 关于编码风格。他解释说两者都是有效的,这取决于程序员的偏好。
我不同意这是一个基于意见的问题。 Stroustrup 的文章清楚地回答了这个问题,没有意见。
【问题讨论】:
-
我一次只声明一个变量,每个变量都在自己的行上。我也只在变量是循环索引(或 x、y 和 z)的情况下将变量命名为 1 个字母的名称,否则变量的名称通常更具描述性。如果你给你的变量一个好名字,你可能不需要写注释来描述变量的含义。
-
在
K&R C中,强制在任何其他代码之前在函数顶部声明所有变量。这意味着多个变量声明很常见。在C++中,该限制被解除,并且一直建议不要声明变量,直到您需要使用它。因此,在需要变量之前批量声明变量一直被认为是不好的风格。 Straustrup 说,如果他不需要C++来保持与C的向后兼容,他会更改多重声明语法,使其更加“以类型为中心”。 -
使用
int * p风格,所以每个阵营都会不喜欢;-) -
想知道它是否也适用于 typedef
typedef int *intPtr;与typedef int* intPtr;(而using intPtr = int*;)。 -
也许更好的问题是“为什么语言创建者定义语法以便
b是int在int * a, b(任何间距选择),如果它与(现在) 共同理解,int *是一个类型,a,b是变量名”。
标签: c++ pointers coding-style conventions