【问题标题】:Why can't I assign lambdas to function parameters as a default value?为什么我不能将 lambdas 分配给函数参数作为默认值?
【发布时间】:2021-12-27 05:54:05
【问题描述】:

取如下函数:

template<typename T>
decltype(auto) find_median(T begin,
                           T end,
                           bool sorted = false,
                           auto comparison = [](auto a, auto b){return a < b;}){
    assert(begin != nullptr);
    assert(end != nullptr);
    return sorted ? find_median_sorted(begin, end) : find_median_unsorted(begin, end, comparison);
}

请注意,我将comparison 参数设置为默认值[](auto a, auto b){return a &lt; b;}。所以如果我这样调用这个函数:find_median(std::addressof(arr), std::addressof(arr[9])) 其中arrstd::array,这应该可以工作。但它不起作用,有人能告诉我为什么吗?

【问题讨论】:

    标签: c++ templates lambda c++20


    【解决方案1】:

    您可以为已知类型提供默认值,但不能为这样的推导类型提供默认值。这不是语言支持的东西。

    您必须为类型提供默认值:

    template<typename T, typename Cmp = std::less<>>
    decltype(auto) find_median(T begin,
                               T end,
                               bool sorted = false,
                               Cmp comparison = {})
    {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      • 2017-09-19
      • 1970-01-01
      • 2014-05-27
      相关资源
      最近更新 更多