c++ - 断言不起作用

标签 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

还有什么我需要做的吗?

最佳答案

表达式0<=p<=11可能评估0<=p , 这会产生一个 bool , 但随后它试图涉及这个 bool11 进行比较,它是一个整数,所以它提升了 boolint , (0 or 1,) 然后检查这个 0 或 1 是否小于或等于 11。所以,它总是会成功。

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

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

相关文章:

ruby-on-rails - Rails ActiveSupport : How to assert that an error is raised?

C++ 指针给出数据类型为 'int' 的错误,但与 'char' 一起工作正常

C++:繁重的多重继承层次结构的设计和成本

c++ - 冲突 : definition of wchar_t string in C++ standard and Windows implementation?

c++ - vector 的排序 vector

java - Java 开源操作系统

symfony - 如何将 mimeType Assert 与 VichUploader 一起使用?

c++ - 如何将断言放在类初始化列表之前?

C++ cin.get();功能异常?