首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中静态对象迷惑

2013-07-09 
C++中静态对象疑惑#includeiostream.hclass Sample{int xpublic:Sample(int a){xacoutconstructin

C++中静态对象疑惑

#include<iostream.h>
class Sample
{
    int x;
    public:
        Sample(int a)
        {  x=a;
            cout<<"constructing object:x="<<x<<endl;
        }
};
void func(int n)
{
    static Sample obj(n);
}
void main()
{
    func(1);
     func(10);

}

程序结果constructing object:x=1,那个func(10);没有调用吗??????
[解决办法]
函数内部的静态对象的初始化只进行一次。
函数内部的静态对象的初始化将在该函数第一次被调用时执行。
所以在func(1)时,static Sample obj被初始化,构造函数的参数为1.
在func(10)时,obj不再进行初始化。
[解决办法]
是的,没有调用,static对象只会在你的fun里面被执行一次,但是他的生命周期是程序结束,它也就死掉了。
[解决办法]
函数内的static变量,只有第一次调用的时候会创建
[解决办法]
func(10) 调用了函数,但是跳过了唯一的一行代码,调用的是个空函数

[解决办法]
静态变量是全局的生存期、局部的作用域。

也就是说我们在调用func(1); 与func(10);时是在对同一个obj对象操作
(因为局部静态变量是建在静态数据区中而不是栈当中)。
对于构造函数而言,在对象生存期内只能调用一次(对象创建后第一次被调用前)
所以就出现了执行的结果。

热点排行