在这种情况下应该使用自动类型
In whats case should use auto type?
我有一些关于何时使用auto
- 明确,尽管上下文如何,它不是更清楚吗?
- 最好是明确的而不是
auto
的情况?
对于 lambda 函数,auto
如何使用这些
auto f = [](auto v, auto x) {};
//or
std::function<void(auto v, auto x)> f;
谢谢。。。
就个人而言,我倾向于将auto
用于选择几种类型的代码:
-
不可言说的类型,例如由 lambda 创建的类型:
auto f = []() { /* some code */ };
-
迭代器,因为它们都实现了相同的不透明接口。我不在乎它是什么特定类型的迭代器,只是它的行为就像一个。
auto it = m.find(key); if(it != m.end() { /* some code */ }
-
如果类型已经在同一行上说了,例如强制转换:
float f = 123.456; /* some code */ auto n = static_cast<int>(f);
或类似:
if(auto p = dynamic_cast<Derived *>(base_ptr)) { /* some code here */ }
对于其他所有内容,我将倾向于明确。
关于std::function
与auto
,我会尽可能使用auto
,然后根据需要回退std::function
。这是因为std::function
开销很小,因为它是使用类型擦除技术实现的。
这通常意味着我将使用模板来实现在合理的情况下接受"可调用事物"的函数。
话虽如此,如果我需要存储一个函数,可能传递它,那么std::function
非常适合。
相关文章:
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 在这种情况下,java对象是否可以调用本机函数
- 在这种情况下显式调用时,std::cout 如何更改析构函数的行为?
- 在这种情况下,我真的复制了字节还是复制了字符?
- 为什么在这种情况下,bool 类型的输出等于 0?
- 在这种情况下,如何传递成员函数而不是函数?
- 为什么在这种情况下递增阵列名称有效?
- 在这种情况下我应该使用哪种设计模式
- 为什么在这种情况下我需要 .template
- 在这种情况下,使用 string_view 是否会导致不必要的字符串复制?
- MSVC 在不知道类型的情况下评估上下文(和错误)
- 我们可以在不知道其真实类型的情况下将基类指针转换为派生类指针吗?
- 我是否访问了已释放的内存,或者在这种情况下DrMemory报告不正确?
- 在这种情况下,"typename..."意味着什么?
- 为什么在这种情况下 x = 44?
- 在这种情况下,如何从类型 "const char*" 初始化字段?
- 为什么我得到"C2678 二进制'+':没有找到采用类型为"const 的左操作数......"的运算符。"在这种情况下?
- 在这种情况下,有没有办法用单个解决方案替换两个仅在类型上不同的相似函数?
- 在这种情况下应该使用自动类型
- 无效使用不完整的类型-为什么在这种情况下没有错误