用 auto 声明指针或引用时应显式标明 *、& 等符号
6.4.1 ID_roughAuto
用 auto 声明指针时显式标明 * 号有利于提高可读性,否则会使人误以为是某种非指针的对象。在声明引用时必须显式标明 & 或 && 号,否则成为对象声明,导致逻辑错误或造成不必要的复制开销。
示例:
int* foo();
int& bar();
auto p = foo(); // Bad
auto* q = foo(); // Good
auto r = bar(); // Be careful, ‘r’ is not a reference
for (auto e: container) { // Is it necessary to copy elements?
....
}
例中 p 为指针,但看起来像是个对象,bar 返回引用,但 r 并不是引用,e 是容器元素的复本,这些问题可能与预期不符,需谨慎对待。
依据
ISO/IEC 14882:2011 7.1.6.4
ISO/IEC 14882:2017 10.1.7.4