首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较array.size()与负值时if条件的意外行为

比较array.size()与负值时if条件的意外行为
EN

Stack Overflow用户
提问于 2015-12-29 12:04:58
回答 1查看 67关注 0票数 0
代码语言:javascript
复制
template <class T>
class Queue {
  private:
    array<T, 10> elems;
    int frt = -1, bck = -1;    
};

当我运行以下代码片段时:

代码语言:javascript
复制
template <class T>
void Queue<T>::Enque(T const& item) {
    cout << "Size of array:" << elems.size() << "\n";
    if (bck < elems.size()) {
        if (bck == -1) frt = 0;
        ++bck;
        elems.at(bck) = item;
        cout << "Element Inserted\n";
    } else {
        cout<<"Queue is overflow\n";
    }
}

我得到了这个输出:

代码语言:javascript
复制
Size of array:10
Queue is overflow

这里显示的是size为10,而bck的值为-1,但它将转到else语句。

但是,如果我将if condition替换为if (bck < 10),则代码运行良好:

代码语言:javascript
复制
Size of array:10
Element Inserted

有人能帮我识别这种行为吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-29 12:10:16

elems.size()很可能返回某种类型的无符号整数类型(类似于size_t),因此在比较中将有符号整数类型和无符号整数类型混合,这是未定义的行为iIrc --在本例中,编译器将-1提升为无符号,如果转换为-1,则会给出0xFFFFFFFF (2^32-1)。当你按字面写10的时候,这两个值都是有符号的,比较和你期望的一样。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34510690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档