Ami*_*mir 2 c++ templates constants template-argument-deduction
我不明白在这种情况下参数推导规则是如何工作的。我有以下简单的代码片段:
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));
}
Run Code Online (Sandbox Code Playgroud)
我得到的结果如下:
PKi
void fn(const T &&) [T = const int *]
PKi
Run Code Online (Sandbox Code Playgroud)
我不明白的是为什么T被推断为const int *. 为什么const没有获得模式匹配?
在参数声明 中T const &&t,const被限定为T,即被t声明为 的右值引用const T。
当传递arwith 类型时,被推导为,则 的类型将为,即指向 的指针的右值引用。请注意,s 在不同的事物(不同级别)上进行限定,一种用于指针,一种用于受指点。const int *Tconst int *tconst int * const &&constconst intconst