存储指针时 auto 和 auto* 的区别

Difference between auto and auto* when storing a pointer

以下在功能上有区别吗?有什么理由偏爱其中之一吗?

auto p = new C();

auto* p = new C();

在您提供的代码段中没有区别。无论哪种方式,编译器都会推断 p 将是指向 C 的指针。

在更一般的情况下,是有区别的;

auto *p = func();

auto p = func();

如果 func() return 不是指针的东西,第一种形式将导致错误消息,但第二种形式不会。这有时很有用(例如在模板代码中),在需要强制要求 func() return 指针而不是(比如)int 的情况下。 [虽然,不可否认,有更清晰和更强大的方法来执行这种要求,例如特征]。