Внимание! Этот тред не про табы vs пробелы! Все и так знают, что единственный адекватный стиль это «табы для отступов, пробелы для выравнивания».
Тред про другое. Допустим, мне нравится стиль при котором бинарный оператор (точка с запятой в for) при разбиении строки переносятся на новую строку и выравниваются друг под другом. Например:
// арифметические выражения
auto a = 2
+ 3
// if
if ( very_long_condition_1
&& very_long_condition_2
// вызов функции
very_long_function_name( very_long_argument_1
, very_long_argument_2
// и даже цикл for!
for ( int i = 0
; i < N
; ++i
Плюс сюда можно добавить base and member initializer list, где строки начинаются с запятой и т.п.
У меня остаётся ряд нерешённых вопросов:
- Где ставить точку с запятой в арифметическом выражении?
- Где ставить закрывающую скобку и точку с запятой при вызове функции?
- Где ставить закрывающую скобку и открывающую фигурную для if/for? Должно ли положение открывающей фигурной отличаться для случая однострочного и многострочного условия? Пока я для себя решил, что стиль K&R, но при многострочном условии открывающая скобка на новой строке. Это если закрывающая круглая была на той же, где и последнее условие.
- Где ставить двоеточие в initializer list при переносе: все равно после имени конструктора или на новой строке перед первым членом списка?
- Придерживаться ли правила «всё или ничего»: помещать все условия или все аргументы на одной строке, если влезают и помещать каждый в своей строке, если не влезают? Или сувать в строку пока влезают и переносить первый невлезший? Больше склоняюсь к «всё или ничего».
ЛОР поможет ответить на эти вопросы, ну или хотя бы попытается.