断言不起作用

Assert is not working

本文关键字:不起作用 断言      更新时间:2023-10-16

我的断言根本不起作用。

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,或任何告诉您的编译器启用所有警告的内容。 您不能在没有启用许多(最好是大多数)警告的情况下尝试编写软件。