Здравствуйте, Pzz, Вы писали:
Pzz>Ох. Вот по-этому я говорю, что программы на C++ имеют тенденцию без нужды аллоцировать память на куче мелкими кусочками. Но мне никто не верит. Можно ведь так, например, сделать:
Pzz>Pzz>{
Pzz> char mode[8] = "w";
Pzz> if (!appConfig.getOptOverwrite())
Pzz> strcat(mode, "x");
Pzz>}
Pzz>
А можно и не делать.
small string optimization хотя бы на три буквы, а то и на семь или больше — де факто стандарт.
И лишние аллокации выоптимизировать компиляторы учатся во всё большем числе случаев.
Завезли constexpr строки в C++20.
Сейчас они должны умереть на этапе компиляции, но это ограничение могут в будущем отменить, и тогда компиляторам придётся уметь делать глубокие оптимизации, т.к. всё равно пропагейтить аллокации нужно будет уметь.
Ныне не справилась бы в данном случае, но вообще для std::string clang уже что-то умеет
https://godbolt.org/z/f1jfP4537
Pzz>На вид все ОК. Наверное где-то протупил, но не таким очевидным образом. Например, fclose() два раза позвал, или как-то по-другому кучу разнес. fopen() не должен кидать исключений, аварийно завершать поток и т.п. ни при каких обстоятельствах.
Всё хуже
https://rsdn.org/forum/cpp.applied/8187612.1Автор: удусекшл
Дата: 04.02.22