class student 

public: 
        static int noofstudents; 
        student& nextstudent() 
        { 
                noofstudents++; 
                return *this; 
        } 
}; 
int student::noofstudents=0; 
void fn(student&s) 

        cout<<s.nextstudent().noofstudents<<endl; 

void main() 

        student ss; 
        fn(ss); 

当我观察s.nextstudent()的时候会发现结果是4而不再是原来的1了! 
怪异的一腿,是不是我观察函数的时候就会使它重复运算了呢?不懂!

解决方案 »

  1.   

    果然如此,在VC与BCB下都是这样的的结果,不过仔细想一想不算BUG,因为毕竟VC上调试的时候只能执行你写的那段代码来得到相应的结果,自然会影响你的结果嘛。而且让调试器来猜测你的意图也不合理。不过也不用太担心,只要知道有这么一回事就可以,如果改变不会对程序结果有什么影响,还是能用的。
      

  2.   

    在VC++中的Watch中放入语句,等于执行该条语句,不信将ss.noofstudents++拖入watch中ss.noofstudents的值马上加一!
      

  3.   

    调试器可能是将自身的dll插入到你程序的进程中,直接从内存中取出变量的值,如果是函数调用,也可能直接引用程序中的函数入口值,这样就变成了改变你程序的值了。