我的断言根本不起作用。

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,但随后尝试将该bool11进行比较,后者是一个整数,因此将bool提升为int(0或1),然后进行检查以查看无论此0或1小于或等于11。因此,它将始终成功。

通过启用更多警告,您可能能够避免此类愚蠢的事故,以便编译器将警告您您很可能在做错事。尝试-Wall,或者告诉编译器启用所有警告的任何方法。如果没有启用许多警告(最好是大多数警告),则无法尝试编写软件。

关于c++ - 断言不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43439494/

10-11 16:18