C++ 存储指针时自动和自动*之间的差异

C++ 存储指针时自动和自动*之间的差异,c++,c++11,auto,C++,C++11,Auto,以下各项之间是否存在功能差异?有什么理由选择其中一个而不是另一个吗 auto p = new C(); 及 在您给出的代码片段中没有区别。编译器将推断,p将是指向C的指针,不管是哪种方式 在更一般的情况下,存在差异 auto *p = func(); auto p = func(); 如果func()返回的内容不是指针,则第一个表单将导致错误消息,但第二个表单不会。当需要强制执行func()返回指针而不是(比如)int的要求时,这有时很有用(例如在模板化代码中)。[尽管,无可否认,有更明确

以下各项之间是否存在功能差异?有什么理由选择其中一个而不是另一个吗

auto p = new C();


在您给出的代码片段中没有区别。编译器将推断,
p
将是指向
C
的指针,不管是哪种方式

在更一般的情况下,存在差异

auto *p = func();

auto p = func();

如果
func()
返回的内容不是指针,则第一个表单将导致错误消息,但第二个表单不会。当需要强制执行
func()
返回指针而不是(比如)int的要求时,这有时很有用(例如在模板化代码中)。[尽管,无可否认,有更明确、更有力的方法来实施这一要求,例如特征]。

没有任何区别,选择你喜欢的。但是,如果在使用
auto*
时,要推导的表达式不是指针类型,那么您将得到一个编译器错误,而在前一种情况下,您不会得到。
auto
将为您添加指针。sameI建议使用
auto*
-如果您愿意,它允许您声明指针为
const
const auto*const p=func()
auto *p = func();

auto p = func();