即使两个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
,并且您不应该看到任何First
或Second
打印。