带有显式模板参数的 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中文网其他相关文章!