У меня есть вопрос: допустим ли приведенный ниже фрагмент кода и является ли он оптимальным для функции генератора последовательности в 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;
Если нет, то как это должно быть реализовано?
Примитивные типы, такие как int
не извлекать выгоду из переместить семантику, ходы точно такие же, как копии. Ваш код может быть упрощен до:
auto sequenceGen = [](int init) {
return [init]() mutable { return ++init; };
};
auto getSeq1 = sequenceGen(100);
cout << getSeq1() << '\n';
cout << getSeq1() << '\n';
Также избегайте использования std::endl
если вы не хотите принудительно очищать буфер, так как он неэффективен по сравнению с '\n'
,
Других решений пока нет …