我的断言根本不起作用。
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<=p<=11
可能评估0<=p
, 这会产生一个 bool
, 但随后它试图涉及这个 bool
与 11
进行比较,它是一个整数,所以它提升了 bool
至 int
, (0 or 1,) 然后检查这个 0 或 1 是否小于或等于 11。所以,它总是会成功。
您可以通过启用更多警告来避免此类愚蠢的事故,这样编译器会警告您您很可能做错了什么。尝试 -Wall
,或者告诉您的编译器启用所有警告的任何内容。如果没有启用许多(最好是大多数)警告,您就无法尝试编写软件。
关于c++ - 断言不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43439494/