当我使用auto
推导指针类型时,我发现了一个奇怪的现象。我的代码是这样的:
#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*
。
auto 的类型推导机制等价于模板参数。因此,您示例中的类型推导类似于
template<typename T>
void foo(T p1);
template<typename T>
void bar(T* p2);
int main()
{
int i;
foo(&i);
bar(&i);
}
其中两个函数都被实例化为类型 void(int*) 但在第一种情况下 T
被推导为 int*
而在第二种情况下 T
的类型为 int
。
关于c++ - 在 C++11 中使用 auto,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33688512/