关于自动类型推导,哪一个是正确的

Which one is correct about the auto type deduction?

本文关键字:哪一个 于自动 类型      更新时间:2023-10-16

我对模板类型推导有点困惑。但当涉及到自动时,它会变得更加令人困惑。我希望我试图提供的例子能总结我的困惑。

std::unordered_map<std::string, int> _m;
//.......
for(auto _pair : _m)
{
     // do stuff
{

现在通常地图的每个元素都是

std::pair<const std::string, int>

我的问题是,我在for循环中编写的代码对auto推导的类型有影响吗?编译器是否试图找到一种方法来匹配循环中的代码和自动推导?

auto完全在初始化值的代码上下文中确定,而不是在后续使用中确定。试图根据任意数量的后续代码推断出几种可能的替代类型中的一种,将导致类型删除器的复杂性实际上是无限的。

这就是为什么像GMP的"表达式类型"(用于避免在赋值之前计算值,而后续的数学运算可能会导致更有效的解决方案)这样的巧妙技巧在类型推导中无法正常工作的原因;将auto与它们一起使用将尝试存储中间表达式,而不是已实现的mpz_class等,即使后续代码需要已实现的类型。