以下之间有功能差异吗?有什么理由更喜欢其中一种吗?
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指向某项是const或const auto * const p = func()指定p指向某项是constANDp不能重新分配。const如果返回类型的限定符func()不兼容,则此类限定也将导致诊断。