【发布时间】:2014-12-27 17:17:10
【问题描述】:
在C++11之前,模板类型推导相当简单:
template <typename X>
void bar(X i) {
std::cout << __PRETTY_FUNCTION__ << std::endl;
}
类型 X 将是调用者传入的任何类型的参数。
现在,对于 C++11,我从Scott Meyers 阅读了一篇关于右值引用的文章。
说明
template<typename T>
void f(T&& param);
在作为通用引用的模板参数的类型推导期间,相同类型的左值和右值被推导为具有略微不同的类型。特别是,T 类型的左值被推导为 T& 类型(即 T 的左值引用),而 T 类型的右值被推导为 T 类型。
我想知道为什么 T 类型的左值被推断为 T& 类型,而 T 类型的右值被推断为 T 类型。
只是要记住的东西吗?还是?
【问题讨论】:
-
请注意,当
X是引用类型时,您提供的示例将变得不正确,例如double&。在这种情况下,X仍会被推导出为double,但参数类型将是double&,因此它们是不同的。没有单一类型X,而是两种类型,推导类型和参数类型。