【问题标题】:lambda constness?拉姆达常数?
【发布时间】:2011-10-08 04:12:24
【问题描述】:

c++0x 支持通过引用捕获值的 lambda:

[&] -> ret_t { return 0; }

捕获 const 引用有意义吗?

[const &] -> ret_t { return 0; }

更根本的是手头的问题; 有没有办法检测作为 std::function<> 传递的给定 lambda 是否没有副作用?

【问题讨论】:

  • “捕获 const 引用有意义吗?” -- 不多。捕获的值不像参数,函数确切地知道它正在获取什么对象,即它们不是可变的。并且用 & 捕获 const 对象没有问题,它们仍然是 const。

标签: c++ functional-programming constants c++11


【解决方案1】:

您甚至无法保证 std::function 中的内容是否为 lambda。你当然不能保证它没有副作用。

如果您想确保您编写的 lambda 函数没有副作用(在可以确保此类事情的范围内),那么唯一的方法就是什么都不捕获:[]

【讨论】:

  • 如果我是编写被传递函数的人,我可以“确保”它没有副作用,但如果我是编写一个期望函数回调没有副作用的库的人-效果,我没有办法知道我正在传递的函数有什么样的常量,这是你说的吗?
  • @lurscher:是的,就是这样。
  • 捕获任何东西并没有真正的帮助,因为 lambda 可能会修改全局或静态变量
  • @ChrisDodd:显然。 C++ 不是函数式语言。理论上任何函数都可以修改任何全局或静态函数。因此,问题是最小化潜在的修改范围。
猜你喜欢
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2011-08-28
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多