断言不起作用

时间:2017-04-16 16:37:50

标签: c++ assert

我的断言根本不起作用。

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

我还需要做些什么吗?

1 个答案:

答案 0 :(得分:3)

表达式0<=p<=11可能评估0<=p,这会产生bool,但之后会尝试将此bool11进行比较,是一个整数,因此它将bool提升为int,(0或1),然后检查此0或1是否小于或等于11.因此,它将始终成功。

你可以通过启用更多警告来避免那种愚蠢的事故,这样编译器就会警告你,你最有可能做错了什么。尝试-Wall,或者告诉编译器启用所有警告的任何内容。如果没有很多,最好是大多数警告,你就不能尝试编写软件。