При написании приложения на C++ я обычно ограничиваю себя специальными языковыми функциями на C++. В основном это означает использование STL вместо CRT, где это возможно.Избегайте CRT
Для меня STL является гораздо более жидким и ремонтопригодным, чем использование ЭЛТ. Рассмотрим следующий пример:
std::string str("Hello");
if(str == "Hello") { ... }
эквивалент C-время выполнения будет:
char const* str = "Hello";
if(strcmp(str, "Hello") == 0) { ... }
Лично я считаю, бывший пример гораздо проще смотреть. Мне просто понятно, что происходит. Когда я пишу первый проход моего кода, первое, что на моей шахте всегда - писать код самым естественным образом.
Одна из проблем, которые испытывает моя команда с прежним примером, - это динамическое распределение. Если строка статична ИЛИ уже выделена в другом месте, они утверждают, что нет смысла потенциально вызывать фрагментацию или иметь расточительное распределение здесь. Мой аргумент против этого состоит в том, чтобы сначала написать код наиболее естественным образом, а затем вернуться и изменить его после получения доказательства того, что код вызывает проблему.
Другая причина, по которой мне не нравится последний пример, заключается в том, что он использует библиотеку C. Как правило, я избегаю этого любой ценой просто потому, что это не C++, он менее читабельный и подвержен большей подверженности ошибкам и представляет собой скорее риск для безопасности.
Итак, мой вопрос: правильно ли я избегаю этого? Runtime? Должен ли я действительно заботиться о дополнительном распределении на этом этапе кодирования? Мне трудно сказать, прав я или нет в этом сценарии.
С технической точки зрения библиотека C ** является ** C++. –
Вы уже сами даете несколько хороших и обоснованных аргументов. –
Если вы хотите неизменную строку времени компиляции, используйте 'const char (&) [N]', во всех остальных случаях используйте 'std :: string'. –