static关键字其实一点也不安静

    xiaoxiao2026-04-05  3

    static关键字在编程中非常容易混淆,因为它用于不同的“上下文环境”有不同的作用和意思,现在我们来吧static关键字进行一个总结,希望能对看到这篇文章的人能有所帮助。

    C语言中static关键字主要有以下作用:

    1、修饰变量:

              static可以修饰全局变量和局部变量。它们都存储在静态区当中。

    a、静态全局变量:

          static修饰的全部变量称为静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它,也就是说静态全局变量不具有外部链接属性。

    </pre>例如:<pre name="code" class="cpp">//test_8_16.cpp #include <iostream> using namespace std; static int count; #include "test_8_16.cpp" int main() { std::cout << count << endl; return 0; }

    在test_8_16.cpp文件中定义了一个静态全部变量 count,并在另一个文件中包含了test_8_16的cpp文件,当我在这个文件中使用count时,编译器报出以下错误

    b、静态局部变量:

         静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他函数也用不了。由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

    2、修饰函数

         修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

    3、在C++中,修饰类的成员变量

         在C++中,用static修饰的类的成员变量称为类的静态成员,类的静态成员只与类本身相关而不与类的各个对象产生关联,并且类的静态成员尽管在类中有申明,但它存在于任何对象之外,对象中不会包含任何与静态成员有关的数据,又由于类的静态成员变量和方法不与任何对象绑定在一起,所以静态成员函数不包含this指针,同时静态成员函数也不能声明为const类型的。

    使用类的成员变量:

     可以使用作用域运算符和类型来直接访问类的静态静态成员:

    class Date { public: Date() { cout << "Date ()" << endl; ++sCount; } void Display() { cout << "year:" << _year << endl; cout << "month:" << _month << endl; cout << "day:" << _day << endl; } // 静态成员函数 static void PrintCount() //静态成员函数只能访问静态成员 { cout << "Date count:" << sCount << endl; } private: int Return_count() { return 0; } private: int _year; // 年 int _month; // 月 int _day; // 日 private: static int sCount ; // 静态成员变量,统计创建时间个数 static int Initcount(); static Date date; // 可以再一个类中,用该类的类型来声明一个静态成员变量 //不完全类型: 有声明,却没有定义的类型 //Date date1; Date* date1; };在上面的程序中我们定义了类的静态成员变量 sCount和类的静态成员函数Initcount( )。由于静态成员变量不关联任何对象,只与类本省相关。所以对象的生命周期包含在静态成员变量的生命周期中,所以我们可以用sCount来统计Date类对象的创建个数。同时我们还应该注意,静态成员在类中只能是声明,不能是定义,要在类外去定义静态成员变量。

    Date类的静态成员变量和函数定义如下:

    int Date::Initcount() { return 0; } // 定义并初始化静态成员变量 int Date::sCount =Initcount(); //注: 静态成员变量必须在类外进行初始化 在类中只能是声明

    转载请注明原文地址: https://ju.6miu.com/read-1308540.html
    最新回复(0)