整数不等于它的值
Integer not comparing equal to its value
我有一段代码正在尝试调试,它产生了奇怪的结果。一个整数,非常清楚地包含值 6,将 false 与文字 6 进行比较。
在我的代码中,这段代码:
int allGreen = 0;
int index = 0;
while (ch->fb[index]->selection_color() == FL_GREEN)
{
++allGreen;
++index;
}
std::cout << allGreen << std::endl;
std::cout << std::boolalpha << (allGreen == 6) << std::endl;
产生输出:
6
false
我正在 Ubuntu 上使用 g++ 4.8.2 进行编译。
这怎么可能发生?
编辑:从条件中删除所有绿色没有帮助。
编辑 2:正如预期的那样,index 和 allGreen 是相等的。两者都不等于 6,尽管都是 6。
文字“6”不是整数,其值不是 6。
ch->fb
数组的大小是多少?如果小于或等于 6,则可能是编译器在此处优化了未定义的行为。
当看到像
这样的简单循环时
while ( a[i] ) i++;
编译器可以假设 i
永远不会超出 a
数组,否则程序会调用未定义的行为。即 i
介于 0
和 size of a - 1
之间。
稍后,如果编译器发现类似 i == 8
的内容,其中 8
大于 size of a - 1
,它会将此条件替换为 false
。
为了保险起见,您可以查看汇编代码。
正如 deniss 已经指出的那样,越界访问数组是未定义的行为,所以也许这就是原因。确保也检查数组的边界。
因此,如果可以对数组的每个 selection_color 进行计数,您可以尝试:
const int MAX_FB_VALUES = 6;
// ...
int countOfGreen = 0;
for (int i = 0; i < MAX_FB_VALUES; ++i)
{
if(ch->fb[i]->selection_color() == FL_GREEN)
++countOfGreen;
}
std::cout << countOfGreen << std::endl;
std::cout << std::boolalpha << (countOfGreen == MAX_FB_VALUES) << std::endl;
当然,尽管无论如何还是使用容器会更好。
我有一段代码正在尝试调试,它产生了奇怪的结果。一个整数,非常清楚地包含值 6,将 false 与文字 6 进行比较。
在我的代码中,这段代码:
int allGreen = 0;
int index = 0;
while (ch->fb[index]->selection_color() == FL_GREEN)
{
++allGreen;
++index;
}
std::cout << allGreen << std::endl;
std::cout << std::boolalpha << (allGreen == 6) << std::endl;
产生输出:
6
false
我正在 Ubuntu 上使用 g++ 4.8.2 进行编译。
这怎么可能发生?
编辑:从条件中删除所有绿色没有帮助。 编辑 2:正如预期的那样,index 和 allGreen 是相等的。两者都不等于 6,尽管都是 6。
文字“6”不是整数,其值不是 6。
ch->fb
数组的大小是多少?如果小于或等于 6,则可能是编译器在此处优化了未定义的行为。
当看到像
这样的简单循环时while ( a[i] ) i++;
编译器可以假设 i
永远不会超出 a
数组,否则程序会调用未定义的行为。即 i
介于 0
和 size of a - 1
之间。
稍后,如果编译器发现类似 i == 8
的内容,其中 8
大于 size of a - 1
,它会将此条件替换为 false
。
为了保险起见,您可以查看汇编代码。
正如 deniss 已经指出的那样,越界访问数组是未定义的行为,所以也许这就是原因。确保也检查数组的边界。
因此,如果可以对数组的每个 selection_color 进行计数,您可以尝试:
const int MAX_FB_VALUES = 6;
// ...
int countOfGreen = 0;
for (int i = 0; i < MAX_FB_VALUES; ++i)
{
if(ch->fb[i]->selection_color() == FL_GREEN)
++countOfGreen;
}
std::cout << countOfGreen << std::endl;
std::cout << std::boolalpha << (countOfGreen == MAX_FB_VALUES) << std::endl;
当然,尽管无论如何还是使用容器会更好。