我的断言根本不起作用。
int tspace::Tpiz::set_pitPoz(int p)
{
assert (0<=p<=11);
pitPoz = p;
}
在主要方面:
Tpiz piz;
piz.set_pitPoz(78);
cout << piz.get_pitPoz();
输出为:
78
---------------
0.03378秒后进程退出,返回值为0
按任意键继续
还有什么我需要做的吗?
最佳答案
表达式0<=p<=11
可能会评估0<=p
,从而产生一个bool
,但随后尝试将该bool
与11
进行比较,后者是一个整数,因此将bool
提升为int
(0或1),然后进行检查以查看无论此0或1小于或等于11。因此,它将始终成功。
通过启用更多警告,您可能能够避免此类愚蠢的事故,以便编译器将警告您您很可能在做错事。尝试-Wall
,或者告诉编译器启用所有警告的任何方法。如果没有启用许多警告(最好是大多数警告),则无法尝试编写软件。
关于c++ - 断言不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43439494/