繁体   English   中英

为什么CLion给我警告?

[英]Why is CLion giving me a warning?

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

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)以及在 n3421的帮助下对n3465进行实质性修改的建议(n3657)

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

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

因此,请使用透明函子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM