产量和静态局部变量的比较
Comparison of yield and static local variable
在阅读C#中的yield关键字时,我突然想到,它似乎与在函数内部声明的静态变量的使用有一些相似之处,比如可以在C中完成。
两者都是在调用之间保存函数状态的方法,而不会在函数外部暴露这一事实。
第一个问题:在如何保存函数的状态方面,两者有什么区别?
第二个问题:像这样不透明地保存函数状态的设计含义是什么?我见过一些基于收益率的"黑客",这似乎是一场等待发生的灾难。除了可枚举集合之外,还有其他情况可以从这种设计中受益吗?
C#yield
看起来非常像Python中的yield
。如果因此,它更接近于协同过程,而不是静态变量:保存函数的整个状态。(回到过去,我们在英特尔上实现协同进程的方式是具有存储器位置的堆栈指针:xchg sp,
otherCoprocessStack
。)
至于优点,它比定义一个单独的线程,并通过一些某种排队机制。当对复杂的内存结构(如树)进行迭代,因为避免了必须手动维护堆栈。
相关文章:
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 如何在函数外部访问函数中局部变量的值?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++中静态方法的局部变量范围
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- 离开范围后如何保护局部变量的值?
- 局部变量名称冲突
- C++ lambda:如何'freeze'局部变量的值?
- 我应该使我的局部变量常量还是可移动的
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 返回对局部变量 - C++ 的引用
- 是否可以影响 C++ 中回调函数的局部变量?
- 警告 C4101 未引用的局部变量
- 产量和静态局部变量的比较