gpt4 book ai didi

c++ - 为什么输出不是预期的那样?

转载 作者:太空狗 更新时间:2023-10-29 23:34:11 27 4
gpt4 key购买 nike

一直在经历这段代码:

#include<cstdio>

#define TOTAL_ELEMENTS (sizeof(array) / sizeof(array[0]))
int array[] = {1,2,3,4,5,6,7};

int main()
{
signed int d;
printf("Total Elements in the array are => %d\n",TOTAL_ELEMENTS);
for(d=-1;d <= (TOTAL_ELEMENTS-2);d++)
printf("%d\n",array[d+1]);
return 0;
}

现在显然它没有进入 for 循环。什么原因?

最佳答案

原因是在 C++ 中你得到了隐式提升。尽管d当您将它与 (TOTAL_ELEMENTS-2) 进行比较时,它被声明为已签名(由于 sizeof 而未签名),d被提升为无符号。 C++ 有非常具体的规则,基本上声明 d 的无符号值将是一致的无符号值 mod numeric_limits<unsigned>::max() .在这种情况下,结果是最大可能的无符号数,它明显大于比较另一侧的数组大小。

请注意,某些编译器(如 g++(带 -Wall))可以被告知对此类比较发出警告,因此您可以确保代码在编译时看起来正确。

关于c++ - 为什么输出不是预期的那样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5356925/

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