#include <stdio.h>
class aa{
public:
int x;
int y;
public:
aa(int a=0, int b=0){x=a; y=b;};
public:
virtual bool ShowPoint();
virtual bool ShowX();// const = 0;
virtual bool ShowY();// const = 0;
};
int main(int argc, char *argv[])
{
aa a(1,2);
a.ShowPoint();
return 0;
}
bool aa::ShowPoint()
{
//当ShowX()返回false,不会执行ShowY() 
return ShowX()&&ShowY();
}
bool aa::ShowX()
{
printf("x=%d\n", x);
return false;
}
bool aa::ShowY()
{
printf("y=%d\n", y);
return true;
}

解决方案 »

  1.   

    这是&&的规则。当然不是bug了
    &&只要有一个为假。后面的不计算了。只有第一个为真,才会计算下面的。这是优化处理。
      

  2.   

    逻辑表达式的短路特性,如果A && B,A计算出为False,B不管是什么,结果一定是False,B就不用计算了,不做无用功。
    C/C++的语言规范看仔细了再下定论,我到现在还没真的见过宣称找到了编译器的bug,结果真是bug的人。
      

  3.   


    没错,编译器这种软件公司维护升级了几十年的东西,不是那么容易找到BUG的
      

  4.   

    我见过,我曾经大量使用局部类,结果一编译,编译器就死掉了 这算是Bug吧.
      

  5.   

    呵呵,编译器的bug,肯定是那种说不出所以然的bug,但确确实实存在的!
      

  6.   

    模板元递归还能导致栈溢出呢?也算bug么?是语言的bug(不准模板无限递归),还是编译器的bug?
      

  7.   

    我又没说是VC编译器的bug,编译器的bug我见过多啦,也被别人确认为bug,但VC用得少,只有经常假死,得结束进程的
      

  8.   

    VC6的话,一是太老了,十一年前的东西,你见过11年前的东西到现在还没有bug的吗?标准在变。
    二是不要装什么中文版,垃圾的一坨。
      

  9.   

    我觉得超过设计目标范围上下限的test case没有意义,不能算bug了。
    分清楚哪些是by design的,哪些是真的bug。
    如果我愿意,我可以在一个工程中加入几百万甚至几亿个cpp文件,别说编译器,连文件系统都会瘫。FAT32不能管理4G以上的文件,这算不算bug呢?
    是人设计的就会有bug,说个故事,Excel97发布前遇到过一个pentium的bug,当两个带扩展前缀的指令相隔正好32字节时,如果发生了跳转,cpu就会忽略掉前缀字节,只执行半条指令,导致crash。最终解决办法是修改了编译器和链接器,扫描代码序列,一旦发现这样的条件的代码就插入nop指令。