static关键字

1.作为静态全局变量:
a.静态变量(包括静态全局变量和静态局部变量)在全局数据区分配内存。
b.静态变量只被初始化一次。
c.未经初始化的静态全局变量会被自动初始化为0或空格
d.静态全局变量在声明它的整个文件中是可见的,而在文件之外不可见,即其他文件可以定义相同名称的变量。
2.作为静态局部变量
a.该变量在全局数据区分配内存。
b.静态局部变量在执行到该对象的声明处时被首次初始化,以后不再进行初始化。
c.一般在声明处初始化,如果没有显示初始化,会被程序自动初始化为0或空格。
d.生命周期随程序,但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。
3.静态函数: 在函数的返回类型前加上static关键字,则该函数即被定义为静态函数。静态函数与普通函数不同,它只能在声明它的文件当中可见,不能被其他文件使用。
4.(重要)静态成员:
类的静态成员:声明为static的类成员(成员数据或成员函数)称为类的静态成员。
类静态成员(成员函数)可用类名::静态成员(成员函数)或者对象.静态成员(成员函数)来访问。
类静态成员变量必须在类外定义,定义时不加static.
类的静态成员函数没有默认的this指针,因此它里面不能使用任何非静态成员。

struct ListNode
{
        ListNode(const int& data = int())
        : _pPre(0)
        , _pNext(0)
        , _data(data)
        {}
        ListNode* _pPre;
        ListNode* _pNext;
        int _data;
};
class Test
{
public:
        Test()
        {
               cout << "Test" << endl;
        }
        ~Test()
        {
               cout << "~Test" << endl;
        }
        static int getCount()
        {
               return g_count;
        }
        Test*operator&()
        {
               return this;
        }
        const Test*operator&()const
        {
               return this;
        }
        int& operator*()//返回data
        {
               return _pCur->_data;
        }
        int* operator->()
        {
               return &(operator*());
        }
private:
        static int g_count;
        int a;
        ListNode* _pCur;
};
int Test::g_count = 0;//静态成员变量的定义
int main()
{
        Test t1;
        const Test t2;
        int ret=t1.getCount();
        cout << ret << endl;
        cout << &t1 << endl;
        cout << &t2 << endl;
        system("pause");
        return 0;
}

不能用const的原因:
这是C++的规则,const修饰符用于表示函数不能修改成员变量的值,该函数必须是含有this指针的类成员函数,函数调用方式为thiscall,而类中的static函数本质上是全局函数,调用规约是__cdecl或__stdcall,不能用const来修饰它。一个静态成员函数访问的值是其参数、静态数据成员和全局变量,而这些数据都不是对象状态的一部分。而对成员函数中使用关键字const是表明:函数不会修改该函数访问的目标对象的数据成员。既然一个静态成员函数根本不访问非静态数据成员,那么就没必要使用const了。

什么时候使用静态数据成员和静态函数呢?
定义数据成员为静态变量,以表明此全局数据逻辑上属于该类。
定义成员函数为静态函数,以表明此全局函数逻辑上属于该类,而且该函数只对静态数据、全局数据或者参数进行操作,而不对非静态数据成员进行操作。

static在c++中的第五种含义:用static修饰不访问非静态数据成员的类成员函数。这意味着一个静态成员函数只能访问它的参数、类的静态数据成员和全局变量。
static的第一种含义:修饰全局变量时,表明一个全局变量只对定义在同一文件中的函数可见。
static的第二种含义:修饰局部变量时,表明该变量的值不会因为函数终止而丢失。
static的第三种含义:修饰函数时,表明该函数只在同一文件中调用。
static的第四种含义:修饰类的数据成员,表明对该类所有对象这个数据成员都只有一个实例。即该实例归 所有对象共有。
static的第五种含义:修饰类成员函数,如上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值