我对模板类型扣除感到困惑。但是当谈到自动时,它会变得更加混乱。我希望我试图提供的例子可以总结我的困惑。
std::unordered_map<std::string, int> _m;
//.......
for(auto _pair : _m)
{
// do stuff
{
现在通常地图的每个元素都是
std::pair<const std::string, int>
我的问题是我在for循环中编写的代码是否会影响auto推断出的类型?编译器是否试图找到一种方法来匹配循环内的代码与自动推断的内容?
答案 0 :(得分:2)
sed
完全是在初始化值的代码的上下文中确定的,而不是后续使用。试图根据任意数量的后续代码推导出几种可能的替代类型之一,这将导致类型演绎者的无限复杂性。
这就是为什么聪明的技巧,如GMP&#34;表达类型&#34; (用于避免在分配时计算值,当后续数学运算可能导致更有效的解决方案时)不能正确处理类型推导;使用cmd.run
和它们会尝试存储中间表达式,而不是实现的auto
等,即使后续代码需要实现的类型。