加空格并不是为了美观。只是为了标识族群的位置。
在题主举例的场景,确实并不需要加空格。
我来给题主举个需要加空格的例子:
Thisisavarofthings=yourfuckingtype+otherdamnedresult*me; oh=mygodblessedsweetheart-thesaintangel/cursedcorpsehere;
看看上面的组合,你能一眼看出来每个符号在哪吗?
比较一下这个:
Thisisavarofthings = yourfuckingtype + otherdamnedresult * me; oh = mygodblessedsweetheart - thesaintangel / cursedcorpsehere;
你还觉得两者仅仅只是美观问题?
对于这个问题,我总结一下:如果代码风格规定了更完整,更具有解释意义的变量名称,那么变量名称就会很长,而空格的价值在于将变量名称有效的分离成组团,提升辨识度。
如果你只使用单字母作为变量名,那么空格确实是没有必要的。
简要的说,加空格是为了辅助分组,而不是一味的加。
--
有一种情况是无条件加空格:关键字之后加空格,原因在于避免它看起来像一个函数调用。
例如 if return while sizeof 之类的关键字,后面无条件加空格,毕竟一个关键字直接加一个括号看起来有点像函数调用。——同样的道理,函数名称与相邻的括号之间,就禁止加空格了。
--
至于那个 if 的判断问题。其实你看过 C++ 作者的书就懂了。
C++作者对这个问题的意见是,他设计C++的时候,希望 0 值是一个无类型值,可以针对所有类型的变量使用,这样对模板编程更加方便。因为无论模板 T 是什么类型都可以与 0 值进行操作。
而 if 语句的目的,就是用来判断 0 与 非零 两种状态。
所以,C++作者规定了 if (xxx==true) 是错误写法,因为不可以将值与布尔量进行比较,布尔量只能当作逻辑量进行运算。
至于你认为 if (!xxx) 不够清晰,有个方法可以替换:
if (xxx) { } else { // 请开始你的表演 }
这个意思是:你可以用 if/else 结构写一个空的真分支,而在假分支写上需要的代码,这种情况下可以清晰的看出这段代码在条件为假时运行。
无论如何,将布尔量与布尔常量true/false进行比较的做法确实是违背C++设计思想的,在C++中,true/false常量只能用于赋值,不能用于比较,在其他语言中才可以。
if (xxx==true) // 错误,布尔量不可直接比较 if (xxx) // 正确 if (yyy==false) // 错误,布尔量不可直接比较 if (!yyy) // 正确 if (xxx==true && yyy==false) // 错误,布尔量不可直接比较 if (xxx && !yyy) // 正确 if (xxx == yyy) // 错误,布尔量不可直接比较 if ( (xxx&&yyy) || (!xxx&&!yyy) ) // 正确 if (xxx != yyy) // 错误,布尔量不可直接比较 if ( (xxx&&!yyy) || (!xxx&&yyy) ) // 正确