C++ 中的 if 语句行为真的很奇怪
Posted
技术标签:
【中文标题】C++ 中的 if 语句行为真的很奇怪【英文标题】:Really weird if statement behavior in C++ 【发布时间】:2020-09-23 01:35:50 【问题描述】:即使两个 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";
【问题讨论】:
nums.size()
不是int
如果您没有就编译错误寻求帮助,最好确保您的示例代码编译 without warnings。
【参考方案1】:
它们不一样。
if(val > nums.size() / 3)
问题是num.size()
的类型是size_t
,它是无符号的。当您将有符号类型与无符号类型进行比较时,您会得到未定义的行为。
如果你真的想让它一样,那么你需要做一个演员:
if (val > static_cast<int>(nums.size()) / 3)
现在它将类似于您的第二个代码
if(-1 > 2 / 3)
这两者都会导致false
,并且您不应该看到任何First
或Second
打印。
【讨论】:
或:if(-1 > static_cast<size_t>(2) / 3)
这不是未定义的行为,请参阅***.com/questions/5416414/signed-unsigned-comparisons以上是关于C++ 中的 if 语句行为真的很奇怪的主要内容,如果未能解决你的问题,请参考以下文章