在C ++中使用auto 11
当我使用auto来推断一个指针types时,我发现了一个奇怪的现象。 我的代码是这样的: 
 #include <iostream> using namespace std; int main() { int i = 100; auto p1 = &i; auto *p2 = &i; cout << *p1 << " " << *p2 << endl; return 0; } 
 在编译和执行后,我们可以发现*p1和*p2的结果是一样的,均为100.这意味着p1和p2都是指向int对象的指针对象。 
 [user@host ~]$ ./test 100 100 
 这两个定义p1和p2语句是否有区别? 
 不同的是,在第一种情况下,auto被推导为int*而在第二种情况下,auto被推断为int ,这导致p1和p2都是int*types。  auto的types演绎机制等同于模板参数的types演绎机制。 你的例子中的types扣除因此类似于 
 template<typename T> void foo(T p1); template<typename T> void bar(T* p2); int main() { int i; foo(&i); bar(&i); } 
 其中两个函数被实例化为void(int *)types,但是在第一种情况下, T被推导为int*而在第二种情况下, Ttypes为int 。 
 在variables声明中使用的auto指定符,使用与在模板参数推导中使用的规则相同的规则推导其types。 
 考虑你的第一个例子(即, auto p1 = &i; )。  auto说明符的types推导如下: 
-   auto用一个虚构的types模板参数(例如U p1 = &i;)replace。
-   &itypes是int*,因此没有意外,根据模板推导规则U推导为int*。
 现在考虑你的第二个例子(即auto *p2 = &i )。 
-  同样, auto被replace为一个虚构的types模板参数(例如,U* p1 = &i;)。
-   &itypes是int*,因此根据模板演绎规则U推导为int。
 因此,在auto *p2 = &i; 占位符typesauto将被正确地推导为int而不是int* ,这将导致p2的types为int** ,正如您所预料的那样。