zoukankan      html  css  js  c++  java
  • 【C++学习笔记】static 关键字

    (阅读《C++ primer plus》可知 C++的static关键字跟Java还是很类似的)

    为什么需要static关键字:在文件A中定义的非局部变量language,在文件B中可以通过 extern string language进行引用; 这样一来,在B文件中就可以使用language了,而且B中的language和A中的language是同一个变量,指向同一个地址。如果不加extern,直接在B文件中申明string language是会报错的,因为A文件中的language是外向链接的,相当于全局变量,而C++有着单定义规则,一个变量在一个程序中不能定义两次。如果B中必须要有一个string language,并且是B自己的,与A中language无关的变量,则这时候需要使用static,static实际上指明了language的链接性是文件内部的,只在B文件内有效,并且B中language会hide掉A中的language

    例子,文件A内容如下

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    using namespace std;
    string language = "us";
    void display();
    int main()
    {
        cout << "language in main: " << language << endl;
        display();
        cin.get();
        return 0;
    }

    文件B

    #include "stdafx.h"
    #include <iostream>
    #include <string>
    using namespace std;
    static string language = "cn";
    
    void display()
    {
        cout << "language in support: " << language << endl;
    }

    输出

    倘若文件B里去掉static关键字,将出现重复定义。B文件里static的意思是告诉编译器,

    1.该language作用域为B文件;

    2.在程序运行期间持续驻留内存

    3.覆盖A文件中定义的全局变量language,因此在B文件中的language都是"cn"

    上面的例子中,没有说明类的static变量的i情况,补充如下:

    1.类的static变量是属于类而非对象的,即所有对象共有一份该变量,这与Java类似

  • 相关阅读:
    windows2003 如何配置ASP网站
    如何在asp.net中获取GridView隐藏列的值?
    GridView.RowCommand 事件中获取当前行的信息
    模块导入导出
    API / DOM
    HTTP(搁置)
    npm
    链接(跳转)<routerlink> 和 路由实例Router
    elementui
    vuex
  • 原文地址:https://www.cnblogs.com/heben/p/9310777.html
Copyright © 2011-2022 走看看