提问人:111111 提问时间:11/10/2020 更新时间:11/10/2020 访问量:583
C++ const 引用模板函数参数类型本身就是一个引用,为什么?[已结束]
C++ const reference template function argument type is itself a reference, why? [closed]
问:
我有以下功能:
template<typename T>
void f(const T& val) {
using value_type = T;
using sub_type = typename value_type::sub_type;
//etc...
}
但是,我遇到了一个问题,即编译器告诉我 T 不是事实,无论它是什么类型,而是对它的引用。这怎么可能,在什么情况下,const-references 的模板参数本身就是引用?
请注意,我可以通过以下方法解决上述问题:
using value_type = std::remove_reference_t<T>;
但我想知道 T 本身在什么情况下可以作为参考。
答:
3赞
Barry
11/10/2020
#1
这怎么可能,在什么情况下,const-references 的模板参数本身就是引用?
这些东西是独立的。我们有一个模板参数 .然后我们有一个函数参数,恰好是 .但两者并没有联系在一起。T
T const&
虽然永远不会根据该函数参数推导出为引用类型,但推导并不是提供模板参数的唯一方法:T
template <typename T>
void f(T const& val);
void g(int i) {
f<int&>(i);
}
在这里,我明确地提供了 的模板参数,它不是推导的。,这里,将是(不是),实际上甚至不是对这里的引用,它实际上是一个(不是)。int&
T
T
int&
int
val
const
int&
int const&
当然,典型的用法是(没有明确的模板参数),它将推断为 和 have 的类型。f(i)
T
int
val
int const&
评论