C++中int*x和int*x之间有区别吗?

Ada*_*own 12 c++ variables pointers declaration naming-conventions

我正在回到我的C++研究中,并且真正试图理解基础知识.指针总是给我带来麻烦,我想确保在我继续前行之前真的得到它并且在路上感到困惑.

可悲的是,我一开始就被我正在阅读的教程中的不一致所困扰.有些人以这种方式做指针声明:

int *x
Run Code Online (Sandbox Code Playgroud)

有些人这样做:

int* x
Run Code Online (Sandbox Code Playgroud)

现在两者的前者似乎是迄今为止最常见的.这令人沮丧,因为第二个对我来说更有意义.当我读int*x时,我读到"这是一个int,它的名字是*x",这是不对的.但是当我读到第二个时,我看到"这里是一个int指针,它的名字是x",这是非常准确的.

那么,在我构建自己的心智图之前,两者之间是否存在功能差异?如果我是第二种方式,我会成为麻风病人吗?

谢谢.

Tha*_*vas 15

着名的Bjarne Stroustrup,以C++的创建和开发而闻名,他说......

"int*p;"之间的选择 和"int*p;" 不是对与错,而是关于风格和重点.C强调表达; 声明通常被认为只是一种必要的邪恶.另一方面,C++非常重视类型.

"典型的C程序员"写"int*p;" 并解释它"*p是什么是int"强调语法,并可能指向C(和C++)声明语法来争论样式的正确性.实际上,*绑定到语法中的名称p.

"典型的C++程序员"写"int*p;" 并解释它"p是指向int的指针"强调类型.实际上,p的类型是int*.我显然更喜欢这种强调,并认为它对于使用C++的更高级部分非常重要.

所以,没有区别.这只是一种代码风格.

这里开始

  • 不幸的是,Stroustrup错了. (7认同)
  • @cdhowie但谁写的东西像`int*x,y;`?通常,编码指南坚持要求您不要在同一行上放置两个声明.当您必须在块的顶部声明所有变量时,旧C中确实会发生这种情况.例如,对于嵌套循环,您可以编写`int i,j,k;`.当然,在C++中(和现代C),每个声明都在`for`语句中. (5认同)
  • @cdhowie用什么方式?我没有看到研究C++程序员的数量,无论是哪种方式.我觉得我比`int*p`更频繁地看到`int*p`,而Stroustrup显然认为他也是这样做的. (4认同)
  • 可读性错误源于在一行上声明多个变量.这样做是没有充分理由的,它只会导致比它解决的更多潜在问题(基本上是懒惰),这就是为什么在为真正的公司工作时你会遇到的最合适的编码标准. (4认同)
  • @sftrabbit在C的早期,当你必须在块的顶部声明所有变量时,有一些上下文可以证明它是合理的.在C++中,永远不会. (2认同)

NPE*_*NPE 10

对于编译器,它们具有完全相同的含义.

在风格上,有支持和反对两者的论据.

一个论点是第一个版本更可取,因为第二个版本:

int* x, y, z;
Run Code Online (Sandbox Code Playgroud)

意味着x,y并且z都是指针,它们不是(仅x).

第一个版本没有这个问题:

int *x, y, z;
Run Code Online (Sandbox Code Playgroud)

换句话说,由于*绑定到变量名而不是类型,因此将其放在变量名旁边是有意义的.

反驳的论点是不应该在同一个声明中混合指针和非指针类型.如果不这样做,则上述参数不适用,将*右侧放在旁边是有意义的,int 因为它是类型的一部分.

无论你决定订阅哪种思想流派,你都会在野外遇到这两种风格,而且更多(有些人写int * x).


Naw*_*waz 5

完全没有区别。

这只是风格问题。

个人更喜欢这个:

int *x;
Run Code Online (Sandbox Code Playgroud)

对此,

int* x;
Run Code Online (Sandbox Code Playgroud)

因为当您在同一行上声明多个变量时,后者的可读性较差。例如,看这个:

int* x, y, z;
Run Code Online (Sandbox Code Playgroud)

x是一个指向 的指针int,但也是yz指针吗?它看起来像他们三分球,但他们不是