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++的更高级部分非常重要.
所以,没有区别.这只是一种代码风格.
从这里开始
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).
完全没有区别。
这只是风格问题。
我个人更喜欢这个:
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,但也是y和z指针吗?它看起来像他们三分球,但他们不是。