对于任何放置牙箍的人:
void f() {
stuff();
}
您希望在长初始化列表后放置大括号? 同样的方式?
Object::Object()
: foo(1)
, bar(2) {
stuff();
}
或者设置一个例外,以便您实际看到init列表的结束位置?
Object::Object()
: foo(1)
, bar(2)
{
stuff();
}
或留空?
Object::Object()
: foo(1)
, bar(2) {
stuff();
}
或者可能是一个奇怪的混合体?
Object::Object()
: foo(1)
, bar(2)
{
stuff();
}
或滥用缩进
Object::Object()
: foo(1)
, bar(2) {
stuff();
}
Object::Object() : foo(1)
, bar(2) {
stuff();
}
在这个小例子中,所有人都很漂亮,但是有十几个初始化器和一个中等长度的功能体,这很快就会发生变化。
答案 0 :(得分:4)
能够检测ctor-initializer列表的开始/结束位置以及代码块开始/结束的位置似乎很重要。
Object::Object ()
: foo (1)
, bar (2)
{
...
}
答案 1 :(得分:2)
我希望一次尽可能多地在屏幕上显示代码,这样我的眼睛就可以尽可能少地滚动来回跳跃。当然,有一个限制。一旦我开始需要为一条线内的某些东西寻找太多的东西,我已经达到了收益递减的程度。如果我没有初始化超过3或4个字段,我通常会这样做。
Object::Object() : foo(1), bar(2) {
stuff();
}
如果我需要初始化很多字段,它往往看起来像这样。
Object::Object() : foo(1),
bar(2),
baz(3) {
stuff();
}
答案 2 :(得分:0)
我猜大多数开发人员都喜欢与他们的括号格式保持一致,以及他们如何在其余代码中使用它。读取不是你自己风格的括号格式是很困难的。尝试破译混合格式会使您的程序对您不熟悉的代码更难以理解。
答案 3 :(得分:0)
我把开口支架放在一个新线上。结果看起来大多像第二个例子,但没有初始化器的缩进。
也就是说,因为这似乎是C ++在实践中具有最广泛布局的部分,我个人已经回到初始化构造函数中的变量(仍然有效),以避免冒犯任何人。 / p>
答案 4 :(得分:0)
我承认在我做的很多事情上全局不一致,这意味着我没有一个全局括号方法,相反,每个语言构造都可能有我自己使用的括号方法。
function()
{
}
control-flow () {
} else {
}
type name {
};
由于构造函数是一个函数...
foo::foo()
: bar(1)
, baz(2)
{
}
答案 5 :(得分:0)
这是我的风格:
Object::Object()
: foo(1),
bar(2) {
// First line here.
}
它与我的支架风格保持一致,但也在初始化器和代码之间建立了视觉分离。