zoukankan      html  css  js  c++  java
  • static, const 与 extern

    1 scope

    h1.cpp

    int val = 10;

    const int kval = 11;

    static int sval = 12;

     

    main.cpp

    extern int val;

    cout << val << endl; // Correct

     

    extern int kval;

    cout << val << endl; // Wrong

     

    extern const int kval;

    cout << val << endl; //Wrong

     

    const 默认是局部变量, 在另一个文件中引入const 需要在源文件中加入关键字 extern 修饰

    另外, extern 不占空间

     

    sval 是无论如何都不能 main.cpp 中出现, 这就是 static 的局部性特征

     

    2. static 定义式

    void fun(int i) {

    static int value = i++;

    cout << value << endl;

    }

    fun(0) -> 0

    fun(1) -> 0

    fun(2)-> 0

     

    3.     const char str3[] = "abc";

        const char str4[] = "abc";

     

        const char* str5 = "abc";

        const char* str6 = "abc";

     

        cout << boolalpha << (str3 == str4) << endl;

        cout << boolalpha << (str5 == str6) << endl;

    返回 false true

    str3, str4 两个字符数组都存在栈空间, 但两者地址值并不相等. str5 str6 并非字符数组二是字符指针, 并不分配存储区, 其后 "abc" 以常量的形式存于常量区, 而他们自己仅是指向该区首地址的指针, 所以相等. &str5 &str6 是指指针自己的地址, 并不相等.

  • 相关阅读:
    剩下的树
    守形数
    小白鼠排队(map容器插入数据的四种方法)
    字母统计
    与7无关的数
    ZOJ
    基于js的CURD插件
    API验证插件
    Django之权限管理插件
    Django之信号和序列化
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3666061.html
Copyright © 2011-2022 走看看