当前位置: 华文星空 > 知识

C/C++ 里指针声明为什么通常不写成 int* ptr 而通常写成 int *ptr ?

2016-11-05知识

我知道题主的问题是啥,不过似乎很多人都没看懂题主想表达什么。

题主想表达的意思是:

int * p =& a ;

* p =& a ;

具有完全不同的语义,前者先计算赋值再计算星号,后者则是先计算星号再计算赋值。语义与运算符优先级都不同,在可读性方面存在很大影响。

因此,这显然是 C/C++ 当初设计上的不足。

不过,为什么会存在这个现象呢?

因为 C 语言当初设计的时候,是不建议在定义变量的时候赋值的

因为 C 语言当初并不是打算让你在定义变量的时候同时赋值,所以 C 语言最初设计为只能在文件头,函数头,区块头定义变量。变量仅仅只是定义,而赋值则是发生在程序逻辑实际发生的时候。

但是随着时代的发展,人们逐渐觉得在定义的时候赋值,将定义推迟到赋值的时候,才是更好的编程实践,C++作者就非常推崇这个。而这个时候,为了兼容 C ,已经没法再解决这个问题了。

不过现在,问题得到了解决,那就是 C++11 引入的 auto 。

实际上前置类型语言的这类设定是:如果你需要赋初值,那么就不要声明类型,让语言自动推导;如果你声明类型,就不要赋初值,否则语义上容易冲突,影响可读性。

如此一来,就不会存在题主曾经有的「初始化语句与赋值语句语义与运算符优先级不一致」的问题了。