0
  1. 来自维基百科

    auto 如果不是自动类型推导,在这种情况下(下)关键字的用途是什么?

    struct SomeStruct {
        auto func_name(int x, int y) -> int;
    };
    
    auto SomeStruct::func_name(int x, int y) -> int {return x + y; }
    
  2. 在哪些情况下需要明确具有类型?

4

1 回答 1

10

这是尾随返回类型。auto只是一个占位符,表示返回类型稍后出现。

这样做的原因是参数名称可以用于计算返回类型:

template<typename L, typename R>
auto add(L l, R r) -> decltype(l+r) { return l+r; }

替代方案是:

template<typename L, typename R>
decltype(std::declval<L>()+std::declval<R>())
add(L l, R r)
{ return l+r; }

该语言的未来添加可能是允许省略尾随返回类型,而是使用 lambdas 允许的自动类型推导。

template<typename L, typename R>
auto add(L l, R r) { return l+r; }
于 2013-03-19T20:49:43.830 回答