我看了一下ASSERT和VERIFY的区别。觉得VERIFY好像是个多余的宏,用VERIFY能够解决的,ASSERT都能解决。那为什么还要有VERIFY呢?
最好举个例子,说明在这种情况下,必须用VERIFY,而不能用ASSERT解决。

解决方案 »

  1.   

    ASSERT仅用于DEBUG下面,VERIFY在DEBUG和Release下面都可以。
      

  2.   

    他们的区别我知道。
    如果差别仅仅是想让程序在Release版本下面执行VERIFY里面的代码,而VERIFY在Release版本下面又不报错,那好像把代码写在VERIFY里面和不写在VERIFY里效果是一样的吧
      

  3.   

    谢谢楼主提的问题及Mackz(在相互)的回答,让我搞清楚 了这个问题
      

  4.   

    可是VERIFY在DEBUG状态下会报错啊。
      

  5.   

    To Mackz(在相互):
    ASSERT在Debug状态下也会报错的。希望你能举个例子说一下,在这个例子中,只能用VERIFY,而不能用ASSERT。
      

  6.   

    把代码写在VERIFY,里面省得换debug release时还要改代码
      

  7.   

    http://topic.csdn.net/t/20020412/22/643025.html
      

  8.   

    To limaolinghu(土耳其大骗鸡):
    你说的不对阿,我可以分成两句写啊,比如:
    Pointer *p = GetPointer();
    ASSERT(p != NULL);
    所以还是可以用ASSERT代替
      

  9.   

    你这个相当于没有把逻辑实现代码写在ASSERT里面,只是写了个判断。
      

  10.   

    谢谢大家把我搞清这两个宏.以后我用VERIFY,而不用ASSERT了,
    因为经常会忘记把代码写了ASSERT中,而在Relese中会出错误.(因为代码没执行)
      

  11.   

    To limaolinghu(土耳其大骗鸡) :
    这两种方式的效果我觉得一样吧,按你的意思,写成
    VERIFY(p = GetPointer());
    但我觉得和分成两句没有什么区别阿。难道是我的理解有问题,
    请指示!
      

  12.   

    这样做是不好的,在断言里面,不应该出来任何实质性的操作,例如给变量赋值:
    int i = 0;
    ASSERT(i = 3);
    cout<<i<<endl;
    这样做在Debug下将输出3,而在Release下将输出0!