为什么 CLion 给我一个警告?

Why is CLion giving me a warning?

本文关键字:一个 警告 CLion 为什么      更新时间:2023-10-16

我声明了一个std::p riority_queue,正如引用在CLion IDE上所说的那样。

priority_queue<int, vector<int>, greater<int>> pq;

沃尼格 说

Clang-Tidy: Prefer transparent functors 'greater<>'

并且此代码不会发出任何警告。

priority_queue<int, vector<int>, greater<>> pq;

我按照参考资料说的那样做了:

std::priority_queue<int, std::vector<int>, std::greater<int> > third (myints,myints+4);

为什么 CLion 给我这个警告,我应该使用什么代码?

为什么 CLion 给我这个警告

警告消息对此进行了解释。首先,它以Clang-Tidy开头:这意味着建议是由Clang-Tidy静态分析工具生成的。

其次,它继续Prefer transparent functors:这意味着 Clang-Tidy 建议你应该使用透明(比较(函子来代替不透明的函子。它还演示了如何声明一个透明的比较函子:'greater<>'

我应该使用什么代码?

理想情况下,在这种情况下,遵循 Clang-Tidy 的建议是个好主意,除非您的目标是标准容器不支持透明比较函子的旧 C++14 之前系统。

虽然透明函子的核心优点,即避免在查找时构造元素类型的大型对象不适用(因为int很小且构造速度快(,但透明函子避免了元素类型的不必要重复,从而提高了可维护性。

有关该主题的更多详细信息和基本原理,请参阅有关透明函子的标准提案 (n3421(、关于异构查找的提案 (n3465( 以及本提案 (n3657(,该提案本质上是在 n3421 的帮助下修订 n3465。

本页 https://clang.llvm.org/extra/clang-tidy/checks/modernize-use-transparent-functors.html 包含以下答案:

使用透明函子时,类型不需要 重复。代码更易于阅读和维护,不易 错误。不可能引入不需要的转换。

因此,请使用透明函子。

相关文章: