我在一些C ++代码中看到过这种用于逗号分隔列表的格式(尽管这可能适用于任何语言):
void function( int a
, int b
, int c
)
我想知道为什么有人会使用更常见的格式,例如:
void function (int a,
int b,
int c
)
答案 0 :(得分:17)
编写SQL语句时,这是一种非常常见的编码风格:
SELECT field1
, field2
, field3
-- , field4
, field5
FROM tablename
优点:
我认为你不想像在SQL中那样频繁地重新排列函数中的参数顺序,所以也许这只是某人的习惯。
将其中一个评论出来的能力将取决于所使用的特定语言。不确定C ++。我知道VB.Net不会允许它,但那是因为它需要一个连续字符(_)来跨行分割语句。
答案 1 :(得分:3)
最后通过复制上一个参数(行)来添加参数更容易。
当您确定第一个参数永远不会改变时(通常是这种情况),这是有意义的。
答案 2 :(得分:3)
恶意?
说真的,有时候很难考虑格式化风格。这主要取决于个人品味。就个人而言,我认为两种形式都有点讨厌,除非你在行长方面受到严重限制。
答案 3 :(得分:2)
另一个优点是,在第一个示例中,您可以注释掉B或C行,并且它将在语法上保持正确。在第二个示例中,如果您尝试注释掉C行,则会出现语法错误。
如果你问我,不值得把它弄得那么难看。
答案 4 :(得分:1)
我会看到的唯一好处是,当您添加参数时,您只需要复制并粘贴最后一行,从而节省编辑逗号位置的额外几个关键笔划等。
答案 5 :(得分:1)
对我而言似乎是个人选择。
答案 6 :(得分:1)
当快速扫描文件时,很明显以逗号开头的每一行都是它上面一行的延续(与简单地比上面的那一行缩进的行相比)。这是以下风格的概括:
std::cout << "some info "
<< "some more info " << 4
+ 5 << std::endl;
(请注意,在这种情况下,分解4 + 5是愚蠢的,但如果你有一个复杂的数学陈述,则可能是必要的。)
我经常使用它,特别是在处理if,for和while语句等条件时。因为单行条件通常省略了curlies。
std::vector<int> v = ...;
std::vector<int> w = ...;
for (std::vector<int>::iterator i = v.begin()
, std::vector<int>::iterator j = w.begin()
; i != v.end() && j != w.end()
; ++i, ++j)
std::cout << *i + *j << std::endl;
答案 7 :(得分:1)
没有理由,我怀疑这只是个人偏好的问题。
我个人更喜欢第二种。
void function (int a,
int b,
int c
)
答案 8 :(得分:1)
我会看到的唯一好处是,当您添加参数时,您只需要复制并粘贴最后一行,从而节省编辑逗号位置的额外几个关键笔划等。
如果要删除最后一个参数,也是如此。
答案 9 :(得分:1)
当您向末尾添加另一个字段时,您添加的单行包含新的逗号,从而产生单行添加的差异,使得在将来某个时间查看更改日志时更容易看到更改的内容。
答案 10 :(得分:1)
似乎大多数答案都围绕着评论或轻松添加新参数的能力。但似乎你将逗号放在行的末尾而不是开头时得到同样的效果:
function(
int a,
int b,
// int c,
int d
)
你可能会说你不能对最后一个参数这样做,你会是对的,但是对于另一个形式,你不能对第一个参数这样做:
function (
// int a
, int b
, int c
, int d
)
因此,权衡是能够注释掉第一个参数而不是能够注释掉最后一个参数+能够添加新参数而无需在前一个参数上添加逗号。
答案 11 :(得分:0)
我知道当我在sql或if语句中包装时,我会尝试确保并且是下一行的开头。
如果A和B
和C
我认为它清楚地表明C仍然是if的一部分。你展示的第一种格式可能就是这样。但与大多数风格问题一样,简单的问题是,如果团队决定采用一种风格,那么就应该坚持。