在这种情况下应该使用自动类型

In whats case should use auto type?

本文关键字:类型 这种情况下      更新时间:2023-10-16

我有一些关于何时使用auto

的问题
  1. 明确,尽管上下文如何,它不是更清楚吗?
  2. 最好是明确的而不是auto的情况?

对于 lambda 函数,auto如何使用这些

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

谢谢。。。

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

  1. 不可言说的类型,例如由 lambda 创建的类型:

    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开销很小,因为它是使用类型擦除技术实现的。

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

话虽如此,如果我需要存储一个函数,可能传递它,那么std::function非常适合。