阅读以下程序并给出执行结果
#include<iostream>
using namespace std;
class A{
public: A(){ cout<<"A-> "; }
~A(){ cout<<"<-~A; "; }
};
class B{
public: B(){ cout<<"B-> "; }
~B(){ cout<<"<-~B; "; }
};
class C{
public: C(){ cout<<"C-> "; }
~C(){ cout<<"<-~C; "; }
};
void func(){
cout<<"\nfunc: ";
A a;
static B b;
C c;
}
int main(){
cout<<"main: ";
for(int i=1; i<=2; ++i){
if(i==2) C c; else A a;
B b; }
func(); func();
return 1;
}
答案:main: A-> <-~A ; B-> <-~B ; C-> <-~C ; B-> <-~B ;
func: A-> B-> C-> <-~C ; <-~A ;
func: A-> C-> <-~C ; <-~A ; <-~B ;
问为什么结果是这样有高手可以详细解析下吗?
为什么说:有一点不同的是第二次运行static B b的时候由于已经有静态变量b的存在,所以第二次的static B b就不再创建实例b,也就没有b的构造函数了。 C和A不也是已经创建过了