Xeo*_*Xeo 17 c c++ history pointers conventions
注意:这个问题是关于星号(*
)的位置.
在大多数C代码中,我看到(例如,在Beej的网络编程指南中),所有变量声明/定义都使用T *name
格式,即绑定*
到变量名称.指针被认为属于变量,而不是类型.
在我看到的大多数C++代码中,格式是T* name
,即它绑定*
到变量的类型.指针被认为属于类型,而不是变量.我自己,作为一个纯粹的C++编码器,也使用这种格式,因为指针类型清楚(对我来说)属于类型,而不是变量.(很明显,即使是C++标准也在示例中使用了这种格式.:))
这有(历史性的)原因吗?当程序员开始做C++时,思维方式是否有所改变?
如果一个C编码器(使用前一种格式)可以解释为什么他/她使用它而不是后者,这也是很好的.
Omn*_*ous 23
如果我冒险猜测,我会说这是因为C++人更有可能认为类型信息本身就是一个东西,因为模板可以在编译时以编程方式操作类型.它们也不太可能在同一个声明中声明几个变量.
该T*
方式侧重类型的信息在一个地方,使得它脱颖而出,将由东西推出类似的混乱T* foo, bar;
与此语法是一个非问题,如果你从来没有声明在同一个语句两个变量.
就个人而言,我发现这种T*
风格非常令人讨厌并且非常不喜欢它.它*
是类型信息的一部分,它是真的,但编译器解析它的方式使它实际上附加到名称而不是类型.我认为这种T*
方式模糊了正在发生的重要事情.
在我的观察中,似乎我在C++社区中很少见.我注意到你对最流行的风格有同样的看法.
当然,要明确这两种风格都适用于任何一种语言.但我确实注意到你做了同样的事情,一种风格在C代码中往往更常见,另一种在C++中更常见.
N.R*_*abh 16
来自Stroustrup的C++ Style and Technique FAQ.
"典型的C程序员"编写
int *p;
并解释它"*p
是什么int
"强调语法,并且可能指向C(和C++)声明语法来争论样式的正确性.实际上,它*
与p
语法中的名称绑定在一起."典型的C++程序员"编写
int* p;
并解释它"p
是指向int
强调类型的指针".事实上,类型p
为int*
.我显然更喜欢这种强调,并认为它对于使用C++的更高级部分非常重要.
Bil*_*eal 14
就个人而言,我不同意这一点 - 我不认为有这样做的C或C++方式.我从未见过任何证据表明这一点.但是,我确实假设为什么星号的语法更靠近C中声明的变量名.
在C中(至少在C89中,绝大多数C在使用中),您必须在块的顶部声明所有变量.这导致程序员在做
T a, b, c;
Run Code Online (Sandbox Code Playgroud)
相对而言,在C++中,这种情况很少见.(在C++中,您声明变量接近于它们的使用位置,变量通常具有构造函数参数等;因此很少在一行上声明多个对象)
这也恰好是语法很重要的唯一情况,因为语句
T* a, b, c;
Run Code Online (Sandbox Code Playgroud)
声明一个指针,而不是程序员可能期望的三个.
由于在一行中放置多个声明在C中更常见,并且也是唯一一个星号位置很重要的情况,程序员更有可能将星号与变量相关联.
也就是说,我从未见过任何证据 - 这只是猜想.
Joh*_*itb 12
有几个人提到了非常好的观点.我只想指出,虽然C非常强烈地保留了"声明反映使用"的含义,但C++却没有.C++中的几个声明符不反映声明中的用法;
int &ref; // but "&ref" has type "int*", not "int".
int &&ref; // but "&&ref" is not valid at all.
Run Code Online (Sandbox Code Playgroud)
我不认为编写它的C++程序员实际上有这个原因,但它可能会阻止C++书籍作者提及它,这可能会影响那些C++程序员.
归档时间: |
|
查看次数: |
769 次 |
最近记录: |