FILE * open (char const * const fpath, char const * const fname, char const * const attrs) { int const lp = strlen(fpath); int const ln = strlen(fname); char fulln [lp+ln+2]; memcpy (fulln, fpath, lp); fulln [lp] = '\'; memcpy (fulln+lp+1, fname, ln); fulln [lp+1+ln] = '\0'; return fopen (fulln, attrs); }
Появилось это в GCC во времена незапамятные, в С вставили емнимп в С99, а в С++ - кажется в 11 году.
Я эту фичу начал активно пользовать когда после профиляния одной своей программули довольно большого размера выяснил, что на управление кучей там жрется чуть не половина времени (причем в основном на временные строчки вот примерно как тут). После чего стал по возможности избегать аллокаций в куче там где это совсем просто делается (как вот в этом случае) и сравнительно часто вызывается. Вообще - присматривать за интенсивностью аллокаций в куче и фиксить там где пофиксить просто, а жрет оно много - imho хорошая практика. Не столько потому что оно неэффективно - а потому что использование всей этой плюсовой машинерии с аллокаторами STL дает довольно приличную константу к скорости.
Тогда же кстати придумал еще один паттерн на эту тему, который кажется не особенно известен, хотя тоже удобен и решает проблему - но это в другой раз.