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

Dan*_*nra 15 c++ auto c++11

以下之间有功能差异吗?有什么理由更喜欢其中一种吗?

auto p = new C();
Run Code Online (Sandbox Code Playgroud)

auto* p = new C();
Run Code Online (Sandbox Code Playgroud)

Pet*_*ter 17

在您给出的片段中没有任何区别。无论哪种方式,编译器都会推断出这p将是一个指向 的指针。C

在更一般的情况下,存在差异。例如;

auto *p = func();

auto p = func();
Run Code Online (Sandbox Code Playgroud)

func()如果返回的内容不是指针,第一种形式将导致错误消息,但第二种形式不会。这有时很有用(例如在模板化代码中),其中需要强制func()返回指针而不是(例如)int. [尽管,不可否认,有更明确和更强大的方法来执行这样的要求,例如特征]。

正如 John Ilacqua 在评论中指出的那样,使用 还具有其他好处auto *,包括const指针的限定。例如,const auto * p = func()指定p指向某项是constconst auto * const p = func()指定p指向某项是constANDp不能重新分配。const如果返回类型的限定符func()不兼容,则此类限定也将导致诊断。

  • 我建议使用“auto*”还有一个额外的好处 - 如果您愿意,它允许您声明指针是“const”:“const auto* const p = func();” (6认同)