自然地,这种技术能够将任何使用<<输出的类型转换为字符串。对于字符串流的更多说明,参见《C++程序设计语言》21.5.3节。
“int* p”正确还是“int *p”正确?
二者都是正确的,因为二者在C和C++中都是有效的,而且意义完全一样。就语言的定义与相关的编译器来说,我们还可以说“int*p”或者“int * p”。
在“int* p”和“int *p”之间的选择与正确或错误无关,而只关乎风格与侧重点。C侧重表达式;对声明往往比可能带来的问题考虑得更多。另一方面,C++则非常重视类型。
一个“典型的C程序员”写成“int *p”,并且解释说“*p表示一个什么样的int”以强调语法,而且可能指出C(与C++)的语法来证明这种风格的正确性。是的,在语法上*被绑定到名字p上。
一个“典型的C++程序员”写成“int* p”,并且解释说“p是一个指向int的指针类型”以强调类型。是的,p是一个指向int的指针类型。我明确地倾向于这种侧重方向,而且认为对于学好更多的高级C++这是很重要的。
严重的混乱(仅仅)发生在当人们试图在一条声明中声明几个指针的时候:
int* p, p1; // 也许是错的:p1不是一个int*
把*放到名字这一边,看来也不能有效地减少这种错误:
int *p, p1; // 也许是错的?
为每一个名字写一条声明最大程度地解决了问题——特别是当我们初始化变量的时候。人们几乎不会这样写:
int* p = &i;
int p1 = p; // 错误:int用一个int*初始化了
如果他们真的这么干了,编译器也会指出。
每当事情可以有两种方法完成,有人就会迷惑。每当事情仅仅是一个风格的问题,争论就会没完没了。为每一个指针写一条声明,而且永远都要初始化变量,这样,混乱之源就消失了。更多的关于C的声明语法的讨论,参见《C++语言的设计和演变》。
对于我的代码,哪一种布局风格(layout style)是最好的?
这种风格问题属于个人的爱好。人们往往对布局风格的问题持有强烈的意见,不过,也许一贯性比某种特定的风格更加重要。象大多数人一样,我花了很长的时间,来为我的偏好作出一个固定的结论。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/