C++ 序列生成器,具有函数外壳的初始值

C++ sequence generator with init value by function enclosure

我有一个问题:下面的代码是否有效,是否最适合 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' 相比效率低下。