C++ C++;14';自动';如果能够获取函数返回类型,是否还需要<;的std::result\u>;?

C++ C++;14';自动';如果能够获取函数返回类型,是否还需要<;的std::result\u>;?,c++,types,return,c++14,auto,C++,Types,Return,C++14,Auto,似乎可以使用C++14auto关键字显示在函数定义的位置,以指示返回类型。在这种情况下,是否仍然需要的std::result_?现在不是过时了吗?是的,绝对是 有时您需要返回类型,但不是函数的结果。假设我有一个向量,我想对每个元素应用一个函数并返回结果。此操作称为map或fmap,我们可以这样实现签名: template <class T, class F, class U = std::decay_t<std::result_of_t<F&(T const&a

似乎可以使用C++14
auto
关键字显示在函数定义的位置,以指示返回类型。在这种情况下,是否仍然需要的
std::result_?现在不是过时了吗?

是的,绝对是

  • 有时您需要返回类型,但不是函数的结果。假设我有一个
    向量
    ,我想对每个元素应用一个函数并返回结果。此操作称为
    map
    fmap
    ,我们可以这样实现签名:

    template <class T, class F,
        class U = std::decay_t<std::result_of_t<F&(T const&)>>>
    std::vector<U> map(std::vector<T> const&, F );
    
    如果
    F
    不能用
    int
    调用,那么实例化
    foo()
    是一个硬编译错误,但是
    bar()
    将从重载集中删除。这在通用代码中非常有价值,因为您可以测试表达式的良好格式

  • 注释<代码>自动
  • 不会告诉您有关函数返回类型的任何信息。如果函数返回调用一个带有一些参数的可调用函数的结果,
    std::result\u of_t
    本身会告诉我该函数在做什么<代码>自动什么也没告诉我


    实际上,一个更好的问题可能是。。。如果我们有
    decltype
    ,为什么需要
    std::result\u的
    。这些似乎更密切相关。毕竟,我可以做
    decltype(x+1)
    ,我如何用
    结果来表达呢
    decltype
    显然更好。事实证明,即使在确定函数调用的结果时,两者之间也存在一定的差距。

    是的,绝对如此

  • 有时您需要返回类型,但不是函数的结果。假设我有一个
    向量
    ,我想对每个元素应用一个函数并返回结果。此操作称为
    map
    fmap
    ,我们可以这样实现签名:

    template <class T, class F,
        class U = std::decay_t<std::result_of_t<F&(T const&)>>>
    std::vector<U> map(std::vector<T> const&, F );
    
    如果
    F
    不能用
    int
    调用,那么实例化
    foo()
    是一个硬编译错误,但是
    bar()
    将从重载集中删除。这在通用代码中非常有价值,因为您可以测试表达式的良好格式

  • 注释<代码>自动
  • 不会告诉您有关函数返回类型的任何信息。如果函数返回调用一个带有一些参数的可调用函数的结果,
    std::result\u of_t
    本身会告诉我该函数在做什么<代码>自动
    什么也没告诉我



    实际上,一个更好的问题可能是。。。如果我们有
    decltype
    ,为什么需要
    std::result\u的
    。这些似乎更密切相关。毕竟,我可以做
    decltype(x+1)
    ,我如何用
    结果来表达呢
    decltype
    显然更好。事实证明,即使在确定函数调用的结果时,两者之间也存在一定的差异。

    使用
    std::result\u of
    而不是
    auto
    声明,然后使用
    decltype
    可能更方便。拥有更多的选择和选择权,这总是一件好事。使用
    std::result\u of
    而不是
    auto
    声明,然后使用
    decltype
    可能更方便。有更多的选择和选择,由一个人支配,总是一件好事。