在运算符之间添加间距的目的是什么?
What's the purpose of adding spacings between operators?
我基本上是自己学C/C++编程的,所以不太了解良好的编程习惯。有一件事总是让我想知道为什么人们总是喜欢在他们的代码中添加运算符之间的间距,例如:
if(x > 0)
而不是
if(x>0)
这有什么特别的原因吗?我们知道编译器只是忽略了这样的间距,我不认为后一个表达式的可读性较差。
有时空间是必要的,因为 C/C++ 词法分析器的最大咀嚼原则。考虑 x
和 y
都是指向 int、表达式的指针
*x/*y
是非法的,因为词法分析器会/*
视为注释。所以在这种情况下,空格是必要的:
*x / *y
(摘自《专家C编程》一书)
我怀疑这总是像你声称的那样发生。通常,在处理大型项目时,对于是否要添加空间是有约定的。
我会根据具体情况应用空格:
a+b+c+d
更具可读性,IMO,比
a + b + c + d
然而
a+b*c+d
可读性低于
a + b*c + d
我会说先遵循惯例,然后再考虑可读性。一致的代码更漂亮。
编译器不关心空格。这只是关于可读性。
有些人喜欢运算符周围的空格,有些人不喜欢。这是个人喜好的问题。
唯一重要的是,当你在一个团队中工作时,你们都同意遵循统一的风格(不仅在这个方面,而且在很多其他细节上),因为两者的混合比统一的方式更难阅读,即使它是你最不喜欢的方式。
这简直是礼貌。您可以根据需要编写代码,但这是一种"标准"方式。
还使代码更具可读性。
两个例子让你明白。
1) 空间更小
if(x<0.3&&y>2||!std::rand(x-y)&&!condition){
std::cout<<++x?0:1<<std::endln;
}
2)具有良好的格式:
if (x < 0.3 && y > 2 || !std::rand(x - y) && !condition) {
std::cout << ++x ? 0 : 1 << std::endln;
}
主要原因是代码可读性(对我来说,这是一个非常重要的原因)。
对我来说,随着空间的增加,代码会打开并变得更加可读(因此更容易理解和修改)
我的风格是这样的:
if (x > 0)
{
....
}
请注意if
和左括号之间的空格 (
。
我同意其他人的说法,即代码对大多数人来说看起来更具可读性。 有些人不会认为它更具可读性,但您必须假设其他人将来会查看代码,并将从更具可读性的样式中受益。
编码风格通常是由使源代码更易于阅读的愿望驱动的。但是,就哪种样式比另一种样式或多或少可读性而言,存在一定程度的主观性。不过,我认为大多数人都会同意,在同一文件中混合使用两种样式将是一个糟糕的选择。
读性。比较:
// C++
if (x > 0)
{
// some
// code
}
# Python
if x > 0:
# some
# code
- 重载运算符的范围是什么?它是否会影响作为类成员的集合的插入函数?
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- 是什么让一些命名函数/运算符与众不同?
- C++,()运算符重载,它的工作是什么
- std::set<Key,Compare,Allocator>::find() 函数使用"<"运算符而不是"=="运算符背后的直觉是什么?
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- c++运算符重载-我实际返回的操作数类型是什么
- 这个typedef和转换运算符语法是什么意思
- 运算符和返回类型是什么意思?
- 双标具有下标运算符的原因是什么?
- 统一初始化是隐式发生的,即使 int 强制转换运算符是使用 explicit 关键字声明的.原因是什么?
- _bstr_t::运算符=是什么意思?
- Python的"in"运算符的C++等价物是什么?
- 将强制转换运算符重载到 std::map 的正确语法是什么
- typeid 运算符忽略 cv 限定符背后的理由是什么?
- 初始化中的模板转换运算符类型推导规则是什么?
- 运算符在C++" "是什么?
- "<<"和">>"运算符的名称是什么?
- 此代码运算符超载中的错误是什么?
- 将多个值与同一变量进行比较时'!='运算符最简洁的方法是什么?