gpt4 book ai didi

c++ - 为什么我不能在 'std::deque' 上使用 operator< ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:31 26 4
gpt4 key购买 nike

在我的代码库上运行 cppcheck 并收到以下错误:

Dangerous iterator comparison using operator< on 'std::deque'.

但是双端队列的迭代器是随机访问迭代器,随机访问迭代器支持不等式运算符。那么是什么给了?

例子:

#include <deque>

int main()
{
std::deque<int> d;
std::deque<int>::iterator di1 = d.begin();
std::deque<int>::iterator di2 = d.end();

if (di1 < di2)
{
// (error) Dangerous iterator comparison using operator< on 'std::deque'.
}

return 0;
}

编辑:此错误已通过 cppcheck ticket #5926 提交并修复.

最佳答案

这是 cppcheck 中的一个错误。

如果我们查看 rule stlBoundaries() 的代码,它触发的容器是:

"bitset|deque|list|forward_list|map|multimap|multiset|priority_queue|queue|set|stack|hash_map|hash_multimap|hash_set|unordered_map|unordered_multimap|unordered_set|unordered_multiset"

但是,除了deque之外,priority_queue也保证有随机访问迭代器。

这条规则的基本原理是程序员可能会不小心写:

for (auto it = container.begin(); it < container.end(); ++it)
...

通过类比等效的整数索引 for 循环,这实际上可能会编译为非随机访问迭代器,并进行某种类型的指针转​​换。

这是添加规则的原始 trac 项:http://sourceforge.net/apps/trac/cppcheck/ticket/247这张票免除 vector: http://sourceforge.net/apps/trac/cppcheck/ticket/313

关于c++ - 为什么我不能在 'std::deque' 上使用 operator< ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com