什么情况下应该使用auto类型?

In whats case should use auto type?

我有一些关于何时使用的问题auto

  1. 说清楚了,看上下文是不是更清楚了?
  2. 最好是明确的案例而不是 auto?

并且使用 lambda 函数 auto 如何使用这些

auto f = [](auto v, auto x) {};
//or
std::function<void(auto v, auto x)> f;

谢谢...

就个人而言,我倾向于将 auto 用于 select 几种类型的代码:

  1. 无法表达的类型,例如由 lambdas 创建的类型:

    auto f = []() { /* some code */ };
    
  2. 迭代器,因为它们都实现了相同的不透明接口。我不在乎它是什么特定类型的迭代器,只是它的行为像一个。

    auto it = m.find(key);
    if(it != m.end() {
        /* some code */
    }
    
  3. 如果类型已经在同一行上说了,例如强制转换:

    float f = 123.456;
    /* some code */
    auto n = static_cast<int>(f);
    

    或类似的:

    if(auto p = dynamic_cast<Derived *>(base_ptr)) {
        /* some code here */
    }
    

对于其他一切,我会倾向于直截了当。

关于 std::functionauto,我会尽可能使用 auto,然后根据需要回退到 std::function。这是因为 std::function 有轻微的开销,因为它是使用类型擦除技术实现的。

这通常意味着我将在合理的情况下使用模板来实现接受 "callable thing" 的函数。

也就是说,如果我需要存储一个函数,可能会传递它,那么 std::function 非常适合。