2 sinat 34927324 sinat_34927324 于 2016.05.11 23:43 提问

断言机制Assert是否等于这个操作,两者有什么区别?

顺序栈的构造函数:
SeqStack(int sz):top(-1),maxsize(sz){
elements=new T [maxsize];
assert(elements!=NULL);
}
可以把assert(elements!=NULL);替换为:
if(elements==NULL)
{
cerr<<"存储分配失败"<<endl;
exit(1);
}吗?
两者有什么区别?

2个回答

caozhy
caozhy   Ds   Rxr 2016.05.11 23:46
已采纳

ASSERT只有在Debug版本中才有效,如果编译为Release版本则被忽略。

断言是为调试除错准备的,而if判断是程序逻辑的一部分。

sinat_34927324
sinat_34927324 它俩有啥相同点吗?我咋觉得它俩的作用都是判断给elements指针分配储存是否失败然后决定是否在继续执行程序呢?
一年多之前 回复
wll1228
wll1228   2016.05.12 07:25

补充一楼的回答,assert在release中也是有效的,要想让其失效,要定义NDEBUG宏。assert可以说是调试的一部分,if是逻辑实现的一部分。

wll1228
wll1228 从表面看一样,但是调试完以后,assert是可以不被编译进可执行文件,但是if就肯定会
一年多之前 回复
sinat_34927324
sinat_34927324 我咋觉得它俩达到的效果是相同的呢?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!