首页 >后端开发 >C++ >为什么在 C 11 的 `make_pair` 中显式指定模板参数无法编译?

为什么在 C 11 的 `make_pair` 中显式指定模板参数无法编译?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 11:43:17151浏览

Why Does Explicitly Specifying Template Parameters in C  11's `make_pair` Fail to Compile?

带有显式模板参数的 C 11 make_pair 无法编译

在 C 11 中,make_pair 函数旨在方便创建对指定的数据类型。但是,在函数调用中显式指定模板参数可能会导致编译错误。

make_pair 函数遵循模板语法:

template<typename T, typename U>
make_pair(T&& argT, U&& argU);

此语法表明 make_pair 接受两个右值引用, argT 和 argU,并从指定参数推导出模板类型参数 T 和 U。

显式提供模板参数时,如in:

std::make_pair<std::string, int>(s, 7);

需要右值引用参数。但是,传递的左值参数 s 不满足此要求。因此,编译器无法在参数类型和右值引用参数类型之间建立匹配。

相反,当省略模板参数时,编译器会执行模板参数推导,从而成功将 s 绑定到 T ( std::string&) 和 7 到 U (int&&)。模板参数中右值引用的独特行为促进了此过程,无论左值还是右值状态如何,它们都可以绑定到同一模板参数的任何类型。

要解决该错误,只需省略显式模板参数规范。

以上是为什么在 C 11 的 `make_pair` 中显式指定模板参数无法编译?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn