C++中的if语句行为真的很奇怪



即使两个if表达式的计算结果相同,也只打印第一条语句。为什么?

map <int, int> elem;
vector <int> nums(2);
int x = 1;
elem[x]=-1;

int val = elem[x];
if(val>nums.size()/3) {cout << "First";} // as you can see, vals is -1 and nums.size() is 2

if(-1>2/3) cout<< "Second";

它们不一样。

if(val > nums.size() / 3) {

问题是num.size()的类型为size_t,它是无符号的。当比较有符号类型和无符号类型时,会得到未定义的行为。

如果你真的想让它一样,那么你需要做一个演员阵容:

if (val > static_cast<int>(nums.size()) / 3)

现在它将类似于你的第二个代码

if(-1 > 2 / 3)

这两种情况都将导致false,并且您不应该看到任何FirstSecond打印。

最新更新