c++ 存储指针时auto和auto* 的区别[重复]

xwbd5t1u  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(123)

此问题已在此处有答案

Does 'auto' type assignments of a pointer in c++11 require '*'?(3个答案)
7年前关闭。
以下各项之间是否存在功能差异?有没有理由选择其中一个?

auto p = new C();

和/或

auto* p = new C();
mwecs4sa

mwecs4sa1#

在你给出的片段中没有任何区别。编译器将推断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,而p无法重新分配。如果返回类型func()上的const限定符不兼容,则这种限定也会导致诊断。

相关问题