簡體   English   中英

為什么我不能使用operator <on'std :: deque'?

[英]Why can't I use operator< on 'std::deque'?

在我的代碼庫上運行cppcheck並收到以下錯誤:

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

但是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中的一個錯誤。

如果我們查看規則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"

但是,除了dequepriority_queue還保證具有隨機訪問迭代器。

這條規則的基本原理是程序員可能會意外地寫:

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

類似於等價的整數索引for循環,這可能實際上編譯為非隨機訪問迭代器,並進行某種轉換為指針。

這是添加規則的原始trac項目: http//sourceforge.net/apps/trac/cppcheck/ticket/247和此票證免除vectorhttp//sourceforge.net/apps/trac/cppcheck/ticket/ 313

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM