使用"auto;"进行类型推断

Type Inference with "auto;"

本文关键字:类型 auto 使用      更新时间:2023-10-16
  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. 需要在哪些情况下显式具有类型?

这是尾随返回类型。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; }