小编典典

Lambda 捕获作为 const 参考?

all

const是否可以在 lambda 表达式中通过引用捕获?

我希望下面标记的作业失败,例如:

#include <algorithm>
#include <string>

using namespace std;

int main()
{
    string strings[] = 
    {
        "hello",
        "world"
    };
    static const size_t num_strings = sizeof(strings)/sizeof(strings[0]);

    string best_string = "foo";

    for_each( &strings[0], &strings[num_strings], [&best_string](const string& s)
      {
        best_string = s; // this should fail
      }
    );
return 0;
}

更新: 由于这是一个老问题,如果 C14 中有工具可以帮助解决这个问题,更新它可能会很好。C14 中的扩展是否允许我们通过 const
引用捕获非常量对象?( 2015 年 8 月


阅读 79

收藏
2022-06-27

共1个答案

小编典典

const不在 n3092 的捕获语法中:

capture:
  identifier
  & identifier
  this

文本只提到了按拷贝捕获和按引用捕获,并没有提到任何类型的 const-ness。

对我来说感觉像是一个疏忽,但我并没有非常密切地关注标准化过程。

2022-06-27