readability-qualified-auto

为推断为指针的 auto 类型变量添加指针限定符。

LLVM 编码规范建议明确指出 auto 类型变量是否为指针。此检查将在类型推断为指针时将 auto 转换为 auto *

for (auto Data : MutatablePtrContainer) {
  change(*Data);
}
for (auto Data : ConstantPtrContainer) {
  observe(*Data);
}

将被转换为

for (auto *Data : MutatablePtrContainer) {
  change(*Data);
}
for (const auto *Data : ConstantPtrContainer) {
  observe(*Data);
}

注意,const volatile 限定类型将保留其 constvolatile 限定符。指向指针的指针将不会被完全限定。

const auto Foo = cast<int *>(Baz1);
const auto Bar = cast<const int *>(Baz2);
volatile auto FooBar = cast<int *>(Baz3);
auto BarFoo = cast<int **>(Baz4);

将被转换为

auto *const Foo = cast<int *>(Baz1);
const auto *const Bar = cast<const int *>(Baz2);
auto *volatile FooBar = cast<int *>(Baz3);
auto *BarFoo = cast<int **>(Baz4);

选项

AddConstToQualified

当设置为 true 时,检查将为定义为 auto *auto & 的变量添加 const 限定符,如果适用。默认值为 true

auto Foo1 = cast<const int *>(Bar1);
auto *Foo2 = cast<const int *>(Bar2);
auto &Foo3 = cast<const int &>(Bar3);

如果 AddConstToQualified 设置为 false,它将被转换为

const auto *Foo1 = cast<const int *>(Bar1);
auto *Foo2 = cast<const int *>(Bar2);
auto &Foo3 = cast<const int &>(Bar3);

否则将被转换为

const auto *Foo1 = cast<const int *>(Bar1);
const auto *Foo2 = cast<const int *>(Bar2);
const auto &Foo3 = cast<const int &>(Bar3);

请注意,在 LLVM 别名中,默认值为 false