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类似

  • 相关阅读:
    静态代理模式
    当对象或属性为空时,如何安全的给默认值
    linux抓取日志
    BigDecimal进行比较
    int与Double类型转换
    通过配置文件的key得值
    ObjectNode ArrayNode JsonNode
    java.lang.NoSuchFieldError报错解决方案
    BigDecimal.setScale 处理java小数点
    Jmeter实现压力测试(多并发测试)
  • 原文地址:https://www.cnblogs.com/heben/p/9310777.html
Copyright © 2011-2022 走看看