以下两者间是否存在功能差异?有没有理由更喜欢其中的一个而非另一个?
auto p = new C();
和
auto* p = new 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
限定符不兼容时产生诊断信息。
auto*
有额外的好处 - 它允许您声明指针为 const
:const auto* const p = func();
- John Ilacqua
auto*
时要推导的表达式不是指针类型,则会导致编译器错误,而在前一种情况下则不会。 - David Gauto
会为你添加指针。这是相同的。 - DimChtz