什么" [&]"用C ++表示?

时间:2015-07-14 10:03:03

标签: c++ c++11

我正在阅读源代码,它包含以下几行。

auto updateSlack = [&](const char slack_type, const double s) {
    if (slack_type == 'e') {
        wns.early_slack = min(s, wns.early_slack);
        tns.early_slack += s;
    }
    else if (slack_type == 'l') {
        wns.late_slack = min(s, wns.late_slack);
        tns.late_slack += s;
    }
};

我对" [&]" " ="之后的符号运营商。任何人都能说出这究竟是什么意思吗?

3 个答案:

答案 0 :(得分:6)

您所展示的是变量声明。

  • auto表示将推断出变量的类型。
  • updateSlack是变量的名称。
  • =指定变量将使用某个值进行初始化(通过复制初始化)。
  • 余数是一个lambda表达式,它构成变量初始化的值。

答案 1 :(得分:0)

函数声明为Lambda function,其中&影响其中使用的变量范围。

答案 2 :(得分:0)

此语句使用lambda表达式。

auto updateSlack = [&](const char slack_type, const double s) {
    if (slack_type == 'e') {
        wns.early_slack = min(s, wns.early_slack);
        tns.early_slack += s;
    }
    else if (slack_type == 'l') {
        wns.late_slack = min(s, wns.late_slack);
        tns.late_slack += s;
    }
};

编译器做了两件事。第一个是编译器定义一个未命名的类,它将包含对应于lambda表达式主体的函数调用操作符。

第二个是编译器创建该类的对象并将其分配给变量updateSlack

您可以通过以下方式想象

struct  
{
    auto &r1 = wns;
    auto &r2 = tns;

   void operator ()( const char slack_type, const double s ) const
   {
        if (slack_type == 'e') {
            wns.early_slack = min(s, wns.early_slack);
            tns.early_slack += s;
        }
        else if (slack_type == 'l') {
            wns.late_slack = min(s, wns.late_slack);
            tns.late_slack += s;
        }
    }
} updateSlack;

然后你可以在程序中的某个地方调用对象的函数调用操作符,例如

updateSlack( 'l', 10.10 );