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