Re: Задали загадку, третий месяц голову ломаю.
От: Evgeny.Panasyuk Россия  
Дата: 25.10.14 18:58
Оценка: 28 (3)
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.