此问题在此处已有答案:
C++ Template explicit rvalue type(2个答案)
3天前关闭。
在下面的示例中,示例化f<int&>(a)
的类型被报告为int&
。
template<typename T>
const T& f(const T& x) {
return x;
}
int main() {
int a{0};
decltype(f<int&>(a))::_;
}
但为什么类型不是const int&
?
编辑:问题还在于,为什么f<int&>(0)
将x
表示为int&
而不是const int&
?
1条答案
按热度按时间amrnrhlw1#
引用本身不能是
const
限定的(只有它们引用的类型可以),因此如果T
是引用类型,则在const T
中忽略const
。引用到引用也不存在。引用折叠规则说,试图形成对
U
类型的左值引用的左值引用将形成对U
类型的左值引用。最后,如果
T
是左值引用类型,那么const T&
与T
的类型相同,在这里是int&
。实际上,让模板参数成为引用并让返回值成为对模板参数的引用是没有意义的。您可能只需要
f<int>(a)
而不是f<int&>(a)
。(虽然您还没有说 * 为什么 *,但您对f<int&>
的行为感兴趣。)