我试图通过使用unordered_map、auto、auto &和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我的问题是:
decltype(k)和decltype(v)在for(auto & [k,v]:m)或for(auto && [k,v]:m)的情况下不是引用类型decltype(k)在for(auto [k,v]:m)中是const类型的?发布于 2019-11-05 22:46:23
问题1)类似于指定的这里
1)如果参数是命名结构化绑定的无括号id表达式,则解密类型将产生引用类型(在结构化绑定声明的规范中描述)。
和这里
案例2:绑定类似元组的类型.第一个标识符的引用类型是
std::tuple_element<i, E>::type.
std::pair (见问题2的答案)实际上是2的元组,因此它是' tuple -like‘。
因此,在这种情况下,键和T的基本类型总是被返回(产生)。
问题2)在内部,unordered_map作为一个std::pair<const Key, T>分配。因此,k是const。
https://stackoverflow.com/questions/58720213
复制相似问题