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 是指指针自己的地址, 并不相等.

  • 相关阅读:
    git-for-windows 安装无图标的问题
    开源协议
    根据iframe获取window
    JS的checkbox状态切换dom无变化
    SQL条件!=null查不出数据
    jquery获取select选中项的文本
    泛型擦除
    树形菜单数据结构
    jqgrid动态填充select
    巨坑:jqgrid竟然取不到编辑模式下input的值
  • 原文地址:https://www.cnblogs.com/zhouzhuo/p/3666061.html
Copyright © 2011-2022 走看看