Генератор последовательности C ++ со значением init по вложению функции - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть вопрос: допустим ли приведенный ниже фрагмент кода и является ли он оптимальным для функции генератора последовательности в C ++ 14?

auto sequenceGen = [](int&& init) {
    int counter = init;
    return [counter=std::move(counter)]() mutable { return ++counter; };
};
auto getSeq1 = sequenceGen(100);
cout << getSeq1()<< endl;
cout << getSeq1()<< endl;

Если нет, то как ее реализовать?

1 Ответ

0 голосов
/ 21 сентября 2018

Примитивные типы, такие как int, не пользуются семантикой ходов , поскольку ходы в точности совпадают с копиями.Ваш код может быть упрощен до:

auto sequenceGen = [](int init) {
    return [init]() mutable { return ++init; };
};

auto getSeq1 = sequenceGen(100);
cout << getSeq1() << '\n';
cout << getSeq1() << '\n';

Также избегайте использования std::endl, если вы не хотите принудительно очищать буфер, поскольку он неэффективен по сравнению с '\n'.

...