在比较 array.size() 与负值时获得 if 条件的意外行为
Getting unexpected behavior of if condition while comparing array.size() with negative value
template <class T>
class Queue {
private:
array<T, 10> elems;
int frt = -1, bck = -1;
};
当我运行以下代码片段时:
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 Insertedn";
} else {
cout<<"Queue is overflown";
}
}
我得到这个输出:
Size of array:10
Queue is overflow
这里显示size
是 10,bck
的值是 -1,但它将转到 else 语句。
但是,如果我将if condition
替换为if (bck < 10)
则代码工作正常:
Size of array:10
Element Inserted
任何人都可以帮助我识别这种行为吗?
elems.size()
很可能返回某种无符号整数类型(类似于 size_t(,因此您在比较中混合了有符号和无符号整数类型,这是未定义的行为 iIrc - 在这种情况下,您的编译器将 -1 提升为 unsigned,如果按原样转换,将给出0xFFFFFFFF (2^32-1(。当您按字面意思编写 10 时,两个值都是有符号的,并且比较符合您的预期。
相关文章:
- 将按位if条件转换为普通if条件
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么这个if(s[j]==s[i] && i>0)条件不适用于这个[{()}]
- 如何改进一堆在已知值范围内评估变量的 else-if 条件?
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- 使用枚举作为条件,if 条件将返回什么,真或假?
- 为什么循环没有中断,并且 if 条件没有按预期工作?
- 使用 if 条件对数字进行分组
- 我们可以在第一个else-if条件结束后使用另一个else-if条件吗
- 调用一个小函数两次(例如在if条件和主体中)比将结果存储在局部变量中更可取
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- 将子字符串与字符串数组进行比较的 IF 条件会在C++中产生错误
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 带有逻辑 OR 运算符的 if 条件的缩写?
- 为什么我可以将 ifstream 文件置于 if 条件?
- 如何将特征张量的值作为'if'条件表达式
- 在 c++ 中检查 if 条件中的向量位置范围
- 如何在Char数组中搜索Char在IF条件语句中
- 未正确评估'If'条件