首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >unordered_map结构化绑定中的推导型

unordered_map结构化绑定中的推导型
EN

Stack Overflow用户
提问于 2019-11-05 22:08:06
回答 1查看 621关注 0票数 3

我试图通过使用unordered_map、autoauto &auto &&来查看结构化绑定中的推导类型。

代码语言:javascript
复制
#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),输出总是

代码语言:javascript
复制
1
1

我的问题是:

  • 为什么decltype(k)decltype(v)for(auto & [k,v]:m)for(auto && [k,v]:m)的情况下不是引用类型
  • 为什么decltype(k)for(auto [k,v]:m)中是const类型的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58720213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档