【问题标题】:auto as function argumentauto 作为函数参数
【发布时间】:2016-04-08 04:17:19
【问题描述】:

在 C++14 中,类似这样的东西是合法的(对于lambdas):-

auto l = [](auto x, auto y) { return x+y; };

但是这样的事情仍然不合法:-

auto sum (auto x, auto y)
{
     return x+y;
}

我的好奇心是为什么没有将第二个添加到标准中(尽管希望它应该在 C++17 中添加)?第二个的优缺点是什么?

【问题讨论】:

    标签: c++ function parameter-passing auto


    【解决方案1】:

    之所以没有添加,是因为要添加的是另一回事,而且时间不是无限的。我们不能期望一次性添加所有有用的增强功能,可以吗?正如您所确定的,它将使用 C++17。

    【讨论】:

    • 现在我很困惑。时间是无限的还是时间是有限的还是两者兼而有之?寻呼physics.stackexchange
    • 为了让大家开心,我们说时间是O(infinity)
    【解决方案2】:

    它是 TS 的一部分,没有及时为 C++14 做好准备。

    相当于

    template <typename T, typename U>
    auto sum(T x, U y) { return x+y }
    

    唯一的优点是它略短。其他一切都一样。

    【讨论】:

    • 包括 ODR 后果?每个TU等中的定义? (一定是,我想 - 这让我觉得这个新功能只是等待发生的一大堆混乱)
    • @LightnessRacesinOrbit 我不认为如果使用模板会造成混淆
    • @AnkitAcharya:也许,但该功能实际上是“使模板看起来像非模板”。对我来说,这似乎不是一个绝妙的主意。
    猜你喜欢
    • 2023-03-27
    • 2020-06-07
    • 2019-02-26
    • 1970-01-01
    • 2014-11-10
    • 2012-02-26
    • 1970-01-01
    相关资源
    最近更新 更多