Стиль С++ и производительность - использует вещи C-стиля, которые быстрее некоторых эквивалентов С++, что плохой практике? Например:
-
Не используйте
atoi()
,itoa()
,atol()
и т.д.! Используйтеstd::stringstream
< - вероятно, иногда это лучше, но всегда? Что плохого с помощью функций C? Да, C-стиль, а не С++, но что? Это С++, мы постоянно ищем производительность. -
Никогда не используйте исходные указатели, вместо этого используйте интеллектуальные указатели. Хорошо, они действительно полезны, все знают, что я знаю это, я использую все это время, и я знаю, насколько они лучше, чем исходные указатели, но иногда совершенно безопасно использовать исходные указатели. Почему бы и нет? "Не стиль С++? < - достаточно ли этого?
-
Не используйте побитовые операции - тоже C-стиль? WTH? Почему бы и нет, когда вы уверены, что делаете? Например - не выполняйте поразрядный обмен переменных (
a ^= b; b ^= a; a ^= b;
) - используйте стандартный трехшаговый обмен. Не используйте сдвиг влево для умножения на два. Etc и т.д. (ОК, это не стиль С++ и C-стиль, но все же "не очень хорошая практика" ) -
И, наконец, самый дорогой - "Не используйте enum-s для возврата кодов, это тоже C-стиль, используйте исключения для разных ошибок"? Зачем? Хорошо, когда мы говорим об обработке ошибок на глубоких уровнях - хорошо, но почему всегда? Что это неправильно с этим, например, когда мы говорим о функции, которая возвращает разные коды ошибок, и когда обработка ошибок будет реализована только в функции, которая вызывает первую? Я имею в виду - нет необходимости передавать коды ошибок на верхнем уровне. Исключения довольно медленные, и они являются исключениями для исключительных ситуаций, а не для.. красоты.
-
и т.д. и т.д. и т.д.
Хорошо, я знаю, что хороший стиль кодирования очень, очень важный < - код должен быть легко читаемым и понятным. Я знаю, что нет необходимости в микро-оптимизации, поскольку современные компиляторы очень умны и Оптимизация компилятора очень эффективны. Но я также знаю, насколько дорого стоит обработка исключений, как реализованы (некоторые) smart_pointers и что нет необходимости в smart_ptr все время.. Я знаю, что, например, atoi
не является "безопасным", поскольку std::stringstream
есть, но все же.. Как насчет производительности?
РЕДАКТИРОВАТЬ. Я не говорю о некоторых действительно трудных вещах, которые имеют только C-стиль. Я имею в виду - не удивляйтесь использованию указателей функций или виртуальных методов и такого рода вещей, которые программист на С++ может и не знать, если никогда не использовал такие вещи (в то время как программисты C делают это все время). Я говорю о более простых и простых вещах, например, в примерах.