为什么CLion给我警告?

时间:2019-08-06 13:00:30

标签: c++ clion

我按CLion IDE上的引用声明了一个std :: priority_queue。

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

Warnig说

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为什么会给我这个警告,我应该使用什么代码?

2 个答案:

答案 0 :(得分:3)

  

CLion为什么给我这个警告

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

其次,它以Prefer transparent functors继续:这意味着Clang-Tidy建议您将透明(比较)函子用于非透明的函子。它还演示了如何声明透明的比较函子:'greater<>'

  

我应该使用什么代码?

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

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

有关该主题的更多详细信息和原理,请参见this standard proposal (n3421)有关透明函子的信息,this proposal (n3465)有关异构查找的信息,and this one (n3657)实质上是在n3421的帮助下修改了n3465。

答案 1 :(得分:1)

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

  

使用透明函子时,类型不必为   重复。该代码更易于阅读,维护且不那么容易   错误。不可能引入不必要的转化。

因此请使用透明函子。