m69*_*g'' 6 c++ stl lazy-evaluation c++17 stdoptional
foo.value_or(bar())我在代码中使用时遇到了麻烦,因为我不希望当可选变量有值bar()时调用该函数。foo我发现这个问题解释了value_or()不使用惰性求值。
现在我想知道为什么会这样,惰性求值一直是 C 和 C++ 中条件语句的标准方面。我发现这非常违反直觉,我认为我不是第一个也不会是最后一个被它绊倒的人。由于存在要求了解设计者想法的风险std::optional,是否有一个用例可以解释为什么惰性评估在这里不是一个好主意?
不可能设计一个执行惰性求值的函数。如果函数调用本身被求值,则函数参数总是被求值。唯一可以短路或以惰性方式求值的是内置的&&and||和?:运算符。
其他相关评论:
一些标准库函数或特性执行的操作不可能在可移植代码中实现,因此它们需要一些编译器“魔法”。但他们试图限制此类事情。
即使是重载的运算符函数operator&&或operator||仍然必须评估其操作数,因此重载这些操作数时需要注意:它们永远不会像内置版本一样运行。
尽管value_or函数本身不能推迟对其参数的求值,但您可以使用一些技巧来传递惰性占位符,该占位符仅在实际需要时才进行计算。
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |