c++ - 在 C++11 中使用 auto

标签 c++ c++11 auto

当我使用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。也就是说p1p2 都是指向 int 对象的指针对象。

[user@host ~]$ ./test 
100 100

这两个定义p1p2的语句有什么区别吗?

最佳答案

不同的是,第一种情况下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/

相关文章:

c++ - 如何重构容器以直接使用谓词方法?

c++ - std::set::find 与 std::find on std::set with const

c++ - 为什么这两个模板函数的输出不同?

c++ - DirectX 10 中多重采样的操作顺序

c++ - 是否可以将模板生成的函数作为 f() 和 f<T>()?

c++ - ofstream 在询问其内容之前创建文件

c++ - 静态伪随机场发生器

c++ - 一个 friend 的缩写模板函数——clang和gcc的区别

c++ - auto 关键字在 Dev C++ 中不起作用

c++ - 在 C++ 中关闭 ofstream 时出现段错误