首页 > 后端开发 > C++ > 为什么 C 11 中的显式模板参数 `std::make_pair` 会失败?

为什么 C 11 中的显式模板参数 `std::make_pair` 会失败?

DDD
发布: 2024-12-16 16:58:17
原创
877 人浏览过

Why Does `std::make_pair` Fail with Explicit Template Parameters in C  11?

C 11 make_pair 使用显式模板参数失败

问题:

使用 g 4.7 时启用 -std=c 11 后,以下代码无法编译:

std::pair<std::string, int>& b = std::make_pair<std::string, int>(s, 7);
登录后复制

尽管存在 make_pair 函数,但编译器会出错。

解释:

std::make_pair 是有意的无需显式指定模板参数即可使用。在 C 11 中,它采用两个右值引用参数,T&& 和 U&&,其中 T 和 U 是模板类型参数。但是,显式指定模板参数会导致预期的右值引用与提供的左值参数(示例代码中的)不匹配。

因此,编译器报告:

error: no matching function for call to ‘make_pair(std::string&, int)’
登录后复制

当未显式提供模板参数时,会发生模板参数推导。这允许右值引用模板参数在作为函数参数出现时绑定到左值。在没有模板参数的 std::make_pair 的情况下,编译器将 T 推断为 std::string& 并将 U 推断为 int 并成功将 s 和 7 绑定到函数参数。

解决方案:

std::make_pair 的推荐用法是省略模板参数,依靠模板参数推导。通过遵循这个规则,编译器将正确处理参数匹配并避免编译错误。

以上是为什么 C 11 中的显式模板参数 `std::make_pair` 会失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板