[英]Why is Clion giving me an error when I declare a struct inside a function?
[英]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.