为什么 CLion 给我一个警告?
Why is CLion giving me a warning?
我声明了一个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 包含以下答案:
使用透明函子时,类型不需要 重复。代码更易于阅读和维护,不易 错误。不可能引入不需要的转换。
因此,请使用透明函子。
- G++ 发出警告,要求删除一个代码的数组,但不删除另一个代码的数组
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- C++ - 在我尝试制作一个简单的计算器时有一个"uninitialized local variable y used"警告
- C++ 警告:在一个声明中将截断从双精度初始化为浮点数,但在另一个声明中则不初始化
- 从 int 中剥离位时,编译器会警告一个转换,但不警告其他转换.有解决方法吗?
- 一个语句中没有多个 cout 的错误/警告
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 为什么 CLion 给我一个警告?
- "used after it was moved [bugprone-use-after-move]"警告在这里是一个真正的问题吗?
- 该代码段在 Colliru 中编译时带有警告,但在 Ideone 中正常编译.哪一个是正确的
- 为什么当我写一个空的主时没有警告
- 为什么'control reaches end of non-void function'只是一个警告?合法吗?
- 需要一个关于用const参数重写函数的警告
- 为什么我得到一个未对齐指针的警告,而不是一个引用
- 我如何创建一个类,可以给我C4251警告
- 一个定义规则警告
- c++代码给出了一个奇怪的警告
- 使用一个方法实现不同类型赋值的优雅方式,并且没有警告
- Int到float的转换会产生一个警告
- 在这段代码中,我有一个警告:控制达到非void函数的结束[- return-type].我怎样才能解决这个问题