断言
运行时断言
#include<iostream> #include<cassert> char *arrayAlloc(int n) {
assert(n > 0); return new char [n]; // n如果小于0,永远不会执行到这里 } int main() {
char *a = arrayAlloc(-1); return 0; }
讯享网
我们定义了一个 arrayAlloc 函数,该函数的唯一功能就是在堆上分配字节长度为 n 的数组并返回。为了避免意外发生,函数 arrayAlloc 对参数 n 进行了断言,要求其大于 0。而 main 函数中对 arrayAlloc 的使用却没有满足这个条件,那么在运行时,我们可以看到如下结果:
讯享网a.out: test.cpp:6: char* arrayAlloc(int): Assertion `n > 0' failed. 已放弃 (核心已转储)
预处理时
使用assert的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。可以定义宏 NDEBUG 来禁用 assert 宏,可以尽量避免程序退出的状况。实例代码如下:
#ifdef NDEBUG # define assert(expr) ((void)0) #else ... #endif

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70638.html