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 *.
有人可以解释我在这里错过了什么吗?
当你有
template<typename T>
void f(const T param);
Run Code Online (Sandbox Code Playgroud)
并且T是一个你没有的指针类型const type *,而是type * const因为你正在创造的是什么,而不是它指向的T是const什么.
这意味着
const auto c = &i;
Run Code Online (Sandbox Code Playgroud)
是一个int * const指向非常数整数的常量指针.