bugprone-swapped-arguments

通过检查隐式转换来查找可能交换的参数。它分析传递给函数的参数类型,并将它们与相应参数的预期类型进行比较。如果存在不匹配或表明潜在交换的隐式转换,则会发出警告。

void printNumbers(int a, float b);

int main() {
  // Swapped arguments: float passed as int, int as float)
  printNumbers(10.0f, 5);
  return 0;
}

涵盖了各种隐式转换,包括: - 用户定义的转换 - 从浮点类型到布尔型或整型类型的转换 - 从整型类型到布尔型或浮点类型类型的转换 - 从布尔型到整型类型或浮点类型类型的转换 - 从(成员)指针到布尔型的转换

需要注意的是,对于大多数参数交换,类型需要完全匹配。但是,此规则存在例外。具体来说,当交换的参数为整型时,并不总是需要完全匹配。从其他整型类型的隐式转换也是可以接受的。类似地,在处理浮点参数时,不同浮点类型之间的隐式转换被认为是可以接受的。

为了避免混淆,如果两个交换的参数都是整型或都是浮点类型,则不会触发警告。在这种情况下,假设开发人员故意使用了不同的整型或浮点类型,因此不会发出警告。这种方法可以防止误报,并提供处理有意使用不同整型或浮点类型的场景的灵活性。