• C/C++ static用法


    这篇文章没有太多的实际内容,简单记录下static的用法。顺便试一下用markdown来写文章。

    1. 在函数中使用

    我们都知道在一个函数中的变量是存储在栈区中,函数的每一次调用都伴随着变量的重新定义和销毁。如果在变量前面加上static关键字,这个变量就会在程序的静态存储区。这个变量只会在第一次调用函数的时候定义并初始化。当再次调用函数时,会保留上次的值。例子:

    int showNum()
    {
        static int num = 0;
        return num++;
    }
    int main()
    {
        for(int i=0;i<10;i++)
        {
            cout << showNum() << endl;
        }
        return 0;
    }//打印0到9
    

    2. 在类中使用

    这里面规则有点多,我直接上代码,然后比较好说明:

    class X{
        int i;
        static int j;
    public:
        X(int ii = 6) : i(ii){
            //非静态成员函数可以访问静态成员函数和变量
            j = i;
        }
        int val(){return j;}
        static int incr(){
            return ++j;
        }
        static int f()
        {
            return incr();
        }
    };
    int X::j = 0;
    int main()
    {
        X x;
        X* xp = &x;
        cout << x.f() << endl;
        cout << xp->f() << endl;
        cout << X::f() << endl;
        cout << sizeof(X) << endl;
        return 0;
    }
    

    有下面几个要点:

    1. 静态成员变量属于类,不属于任何一个对象,必须在类外初始化。(int X::j = 0)
    2. 静态成员函数只能访问静态成员,非静态成员函数可以访问静态成员。
    3. 可以用类名::这样的形式访问静态成员变量和静态成员函数。

    上面sizeof(X)的结果是4,说明静态成员变量j是放在静态存储区域。每个对象的成员变量都是独立的,而静态成员是所有对象共享,它没有this指针,所以静态成员函数只能访问静态成员变量。

    3. translation unit 隐藏

    这个translation unit我也不知道该怎么翻译,就理解为一个源文件吧。static还有一个作用就是,声明为static的变量和函数只在该文件(translation unit)有效,在其他文件中不能访问。这在大型工程中,能有效避免命名重复。

    markdown写东西果然爽,不过以前中文格式看习惯了,谁能告诉我,首行缩进两个字这个需求该怎么办到。

  • 相关阅读:
    Java WebService入门实例
    Maven是什么
    for 循环
    2.4 DevOps工程师的故事:构建运行时的严谨性
    2.3.3 构建微服务的入口:Spring Boot控制器
    2.3.2 引导Spring Boot应用程序:编写引导类
    2.1.3 互相交流:定义服务接口
    第2章 使用Spring Boot构建微服务
    第1章 欢迎来到Cloud和Spring
    第一次在博客园开博
  • 原文地址:https://www.cnblogs.com/xibaohe/p/3534369.html
Copyright © 2020-2023  润新知