VLarin писал(а):
В "1001 совет по C/C ++" - по-моему там загоняют про предпочтительность использования префиксной формы операторов ++ и --. Но, ИМХО, это просто дело привычки, это тоже самое, что писать a + b*c вместо a+b*c и ставить пробелы между if и скобкой (if () вместо if()). Я лично пишу i++ и ставлю пробелы, а кто-то нет, и это дело привычки:)).
Увы, не все привычки одинаковы. Я готов согласиться с Вами по поводу пробелов - хотя я пишу и вовсе a + b * c, и считаю, что лучше писать
for (p, q; r < s; s), а не
for(p ,q ;r < s ;s ), но это имеет относительно малое значение, равно как и привильное и систематическое выравнивание программы и использование табуляций в тексте (тяжкое наследие первых дней UNIX'а). В конце концов, это влияет только на
читаемость программы человеком. Не могу сказать, что читаемость не важна, но - у всех свои привычки. И это вопрос уважения к читателю. Я обычно исхожу из того, что программа - это, в первую очередь, текст, и, соответственно, знаки препинания ().,;?: должны расставляться соответсвенно. Но это -
мое предпочтение, и не более того.
С
++i vs
i++ вопрос более тонкий. В C они более или менее эквивалентны, если возвращаемое значение не используется. В C++ эти операции могут быть переопределены, и стать неэквивалентными, что приводит к тонким и труднонаходимым ошибкам. Даже переводя на человеческий язык: "увеличить i на единицу и вернуть получившееся значение" звучит как-то лучше (более похоже на "увеличить i на единицу"), чем "запомнить текущее значение i, увеличить i на единицу, и вернуть запомненое значение". И еще. Все ничего, когда i. Ну а когда это сложное выражение? (Например,
*foo(aaa)->bbb->ccc->ddd. Все законно, можно писать и
++*foo(aaa)->bbb->ccc->ddd, и
*foo(aaa)->bbb->ccc->ddd++.) Нам надо дочитать его до конца, чтобы понять, что происходит. В префиксной же форме это ясно сразу. А я не немец такое читать - это они отрицание ставят в конце предложения. Так что
эту привычку я все-таки рискну осудить как вредную. И последняя капля - я встречал компиляторы, которые генерируют лишний код в случае
i++. А компиляторы, как и родителей, не выбирают
- какой приходит с процессором, такой и есть. А вот от привычек иногда трудно избавляться ("Бросить курить очень просто. Я сам это делал тысячу раз").