当ParamType既不是指针也不是参考时,自动类型推导

san*_*pta 1 c++ pointers auto c++11 type-deduction

我提到Scott Meyers的"更有效的C++"用于自动类型演绎.提到的是与模板类型推导相同的方式,并且提到了3种情况.我的问题属于案例3(当ParamType不是指针或引用时),但结果与所描述的不匹配.

#include <iostream>

int main (void)
{
   auto i = 2;
   const auto c = &i;

   *c = 4;

   std::cout << "i is " << i;
}
Run Code Online (Sandbox Code Playgroud)

它应该工作

template<typename T>
void f(const T param);

f(&i);   // int *
Run Code Online (Sandbox Code Playgroud)

所以,T这里应该匹配int *和完整的类型param应该是const int *.

但是,正如上面的程序所示,c不是,const int *而是int *.

有人可以解释我在这里错过了什么吗?

Nat*_*ica 7

当你有

template<typename T>
void f(const T param);
Run Code Online (Sandbox Code Playgroud)

并且T是一个你没有的指针类型const type *,而是type * const因为你正在创造的是什么,而不是它指向的Tconst什么.

这意味着

const auto c = &i;
Run Code Online (Sandbox Code Playgroud)

是一个int * const指向非常数整数的常量指针.