我的断言根本不起作用。
int tspace::Tpiz::set_pitPoz(int p)
{
assert (0<=p<=11);
pitPoz = p;
}
主要:
Tpiz piz;
piz.set_pitPoz(78);
cout << piz.get_pitPoz();
输出结果为:
78 - - - - - - - - - - - - - - Process exited after 0.03378 seconds with return value 0 Press any key to continue
我还需要做些什么吗?
答案 0 :(得分:3)
表达式0<=p<=11
可能评估0<=p
,这会产生bool
,但之后会尝试将此bool
与11
进行比较,是一个整数,因此它将bool
提升为int
,(0或1),然后检查此0或1是否小于或等于11.因此,它将始终成功。
你可以通过启用更多警告来避免那种愚蠢的事故,这样编译器就会警告你,你最有可能做错了什么。尝试-Wall
,或者告诉编译器启用所有警告的任何内容。如果没有很多,最好是大多数警告,你就不能尝试编写软件。