我正在学习C++20的新内容,试图理解常见的co-routines生成器用例。我在这里尝试创建一个小例子,但如果有错误,请原谅:
generator<int> Generate() {
int i = 0;
while(1) {
co_yield i++;
}
}
int main()
{
auto gen { Generate() };
for (int x = 0; x < 10; ++x) {
gen.next();
std::cout << gen.getValue() << std::endl;
}
return 0;
}
但我不认为这与带有静态变量的函数有任何区别,例如:
auto gen() {
static int i = 0;
return i++;
}
int main()
{
for (int x = 0; x < 10; ++x)
std::cout << gen() << std::endl;
return 0;
}
我认为我可能能够看到异步I/O是一个使用案例,特别是对于co_await
关键字,但对于这个生成器示例,我肯定对它们的使用方式存在误解。如有任何解释,将不胜感激。
[i = 0]() mutable -> int { return ++i; }
。 (注:Lambda 表达式是 C++11 引入的一种匿名函数,该表达式可以在需要函数对象时定义并使用,通常用于函数回调、STL 算法等场景。在这个例子中,[i = 0]
是捕获列表,() mutable
是参数列表和可变说明符,-> int
是返回类型说明符,{ return ++i; }
是函数体。) - Eljay