misc-misplaced-const

此检查诊断当 const 限定符应用于 typedef/ using 指向指针类型而不是指向指针的类型时,因为这种结构往往会误导开发者,因为 const 应用于指针而不是指针指向的类型。

例如,在以下代码中,结果类型为 int * const 而不是 const int *

typedef int *int_ptr;
void f(const int_ptr ptr) {
  *ptr = 0; // potentially quite unexpectedly the int can be modified here
  ptr = 0; // does not compile
}

当底层 typedef/using 类型是指向 const 类型的指针或函数指针类型时,此检查不会诊断。这是因为 const 限定符不太可能被误解,因为它在底层指针指向的类型上将是多余的(或不允许的)。