在无序映射的结构化绑定中推导类型

Deduced type in structured binding of unordered_map

本文关键字:类型 绑定 结构化 无序 映射      更新时间:2023-10-16

我正试图通过使用autoauto &auto &&来查看无序映射的结构化绑定中的推导类型。

#include <string>
#include <iostream>
#include <unordered_map>
#include <type_traits>
int main() {   
std::unordered_map<std::string, std::string> m{{"a","a1"}, {"b","b1"}};
for(auto &&  [k,v]:m)
{
std::cout << std::is_same<decltype(k), std::string const  >::value << 'n';
std::cout << std::is_same<decltype(v), std::string >::value << 'n';
}
}

无论我使用for(auto [k,v]:m)for(auto & [k,v]:m)还是for(auto && [k,v]:m),输出始终是

1
1

我的问题是:

  • for(auto & [k,v]:m)for(auto && [k,v]:m)的情况下,为什么decltype(k)decltype(v)不是参考类型?

  • 为什么CCD_ 11在CCD_ 13的情况下是CCD_?

问题1(如此处指定

1(如果参数是命名结构化绑定的未加括号的id表达式,则decltype生成引用的类型(在结构化绑定声明的规范中描述(。

和此处:

案例2:绑定一个类似元组的类型[…]第i个标识符的引用类型是std::tuple_element<i, E>::type

std::pair(请参阅问题2的答案(实际上是2的元组。因此,它是"tuple-like"。

因此,在这种情况下,Key和T的基本类型总是被返回(产生(。

问题2(在内部,CCD_ 16被分配为CCD_ 17。因此,k是const

相关文章: