c++ 函数模板的返回类型不是常量T&?[duplicate]

brccelvz  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(121)

此问题在此处已有答案

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&

amrnrhlw

amrnrhlw1#

引用本身不能是const限定的(只有它们引用的类型可以),因此如果T是引用类型,则在const T中忽略const
引用到引用也不存在。引用折叠规则说,试图形成对U类型的左值引用的左值引用将形成对U类型的左值引用。
最后,如果T是左值引用类型,那么const T&T的类型相同,在这里是int&
实际上,让模板参数成为引用并让返回值成为对模板参数的引用是没有意义的。您可能只需要f<int>(a)而不是f<int&>(a)。(虽然您还没有说 * 为什么 *,但您对f<int&>的行为感兴趣。)

相关问题