Lambda表达式中的下划线

时间:2018-03-31 07:19:03

标签: c++ lambda

我正在解释实验性Boost :: DI依赖注入框架的实现:

http://boost-experimental.github.io/di/cppnow-2016/#/7/22

在那里提供以下代码:

template <typename T, std::size_t... Ns>
constexpr auto getCnstrSize (std::index_sequence<Ns...>) noexcept {
    auto value = 0;
    int _[]{(is_constructible<T, std::make_index_sequence<Ns>>{}? value = Ns 
    : value)...};
return value;
}

我对Lambda特别感兴趣。我理解它的功能,它通过index_sequence,并且如果类型T具有带有该数量的参数的构造函数,则设置值。

令我难过的是下划线。我摆弄了,我不能把它带走。我也不能插入像_=[]这样的相等,所以它不是变量名。我的问题是,它做了什么?

1 个答案:

答案 0 :(得分:4)

下划线只是该词汇块中的变量名。它是使用pack expansion填充的initializer_list构建的。它不是lambda,由于使用{}的初始化列表,它看起来很混乱。