Здравствуйте, fk0, Вы писали:
fk0> Собеседовали в одной конторе. Давали штатную задачку, мол возвращается указатель на локальную переменную. Говорю -- говнокод, надо static. Возражают, мол можно же сделать printf("%s %s %s", func(x), func(y), func(z)), где func(arg) возвращает строку в зависимости аргумента.
fk0> И как, спрашивается, можно эту func() написать. Без выделения malloc'ом внутри неё.
По мотивам
call wrapperАвтор: remark
Дата: 04.05.08
remark'а:
#include <cstdio>
#include <array>
using namespace std;
using buffer = array<char, 128>;
char *func(char x, buffer &&s = buffer{})
{
s[0] = x;
s[1] = x + 1;
return s.data();
}
int main()
{
printf("%s %s %s", func('a'), func('b'), func('c'));
}
LIVE DEMO
Вывод:
ab bc cd
Можно без rvalue reference, например через mutable.