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

13

以下两者间是否存在功能差异?有没有理由更喜欢其中的一个而非另一个?

auto p = new C();

auto* p = new C();

2
没有任何区别,可以使用任意一种方式。但是,如果在使用 auto* 时要推导的表达式不是指针类型,则会导致编译器错误,而在前一种情况下则不会。 - David G
auto 会为你添加指针。这是相同的。 - DimChtz
1个回答

15
在你提供的代码片段中没有区别。编译器会推断出`p`将成为指向`C`的指针,无论哪种方式。
在更一般的情况下是有区别的。例如;
auto *p = func();

auto p = func();

第一种形式将在func()返回的不是指针时导致错误消息,而第二种则不会。有时这很有用(例如在模板化代码中),需要强制要求func()返回指针而不是(比如)int。[尽管可以通过特征等更清晰和强大的方法来实现这种要求]。

正如John Ilacqua在评论中指出的那样,使用auto *有进一步的好处,包括指针的const限定。例如,const auto * p = func()指定p指向的是const对象,或者const auto * const p = func()指定p指向的既是const对象又不能被重新分配。这样的限定还会在func()返回类型的const限定符不兼容时产生诊断信息。


6
如果您希望,我建议使用 auto* 有额外的好处 - 它允许您声明指针为 constconst auto* const p = func(); - John Ilacqua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接