我不明白在这种情况下参数推导规则是如何工作的。我有以下简单的代码片段:
template<typename T>
void fn(T const &&t) {
std::cout << __PRETTY_FUNCTION__ << std::endl;
std::cout << typeid(decltype(t)).name() << std::endl;
}
int main() {
int const *ar = nullptr;
std::cout << typeid(ar).name() << std::endl;
fn(std::move(ar));
}
我得到的结果如下:
PKi
void fn(const T &&) [T = const int *]
PKi
我不明白的是为什么T
推断为const int *
。为什么const
没有获得模式匹配?
最佳答案
在参数声明 T const &&t
中,const
在 T
上被限定,即 t
被声明为对 const T
的右值引用。
当传递 const int *
类型的 ar
时,T
被推导为 const int *
,然后t
的类型将为 const int * const &&
,即对 const
指针的右值引用,该指针指向 const int
>。请注意,const
在不同的事物上(不同级别)进行限定,一个用于指针,一个用于指针接收者。
关于c++ - 将 `T const &&t` 与 `int const *` 匹配时 C++ 模板函数参数推导的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71555055/