为什么c ++指针*与声明的变量关联,而不是类型?

Sid*_*Bob 21 c++ pointers language-design declaration

为什么C++的设计使得在同一行上声明两个int*的正确方法是

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

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

我知道有些人认为你应该避免使用任何形式并在自己的行上声明每个变量,但我对为什么做出这个语言决定感兴趣.

Luc*_*ore 22

为了保持与C代码的兼容性,因为这就是C的工作原理.

Bjarne 在这里提出了一个很好的观点:

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

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

A typical C++ programmer写道int* p;并解释它p is a pointer to an int强调类型.实际上,p的类型是int*.我显然更喜欢这种强调,并认为它对于使用C++的更高级部分非常重要.

因此,在C++中这样工作的动机是它如何在C中工作.

它在C中运作的动机是,如上所述,C强调表达而不是类型.

  • @illEatYourPuppies啊,但这是一个完全不同的问题:P (4认同)
  • 我通常使用`int*p`运行,因为我发现两种方式都很难看:) (2认同)

Jam*_*nze 8

简单的答案是:因为这就是C的方式.当然,这只会引出一个问题:为什么C会这样做呢?

在早期的C中,最初的哲学是声明是使用的精确图像.所以当你写:

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

,您声明表达式*p具有类型int(并且编译器会相应地计算出实际类型p).

当然,这在C引入的日子typedef和之后都不再是真实的struct.任何相似之处都完全消失了const (首先在C++中引入,然后改装到C中)

int *const p;
Run Code Online (Sandbox Code Playgroud)

与使用无关.但到那时,模具已被铸造.