0

我有一个问题:下面的代码是否有效以及它是否最适合 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;

如果不是应该如何实施?

4

1 回答 1

0

像这样的原始类型int不会从移动语义中受益,因为移动与副本完全相同。您的代码可以简化为:

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

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

std::endl除非你想强制刷新缓冲区,否则也要避免使用,因为它与'\n'.

于 2018-09-21T11:01:38.543 回答