Thinking in C++【9】名字控制

1.static的两种基本含义

  • 在固定的地址上(静态数据区)进行存储分配,而不是每次函数调用时正在堆栈上产生;
  • 对一个特定的编译单位来说是局部的,即static控制名字的可见性

2. 函数内部的静态变量

  • 通常,在函数体内定义一个局部变量时,编译器每次调用函数时,堆栈的指针向下移动,为这些局部变量分配内存。

  • 若在函数内部定义一个static对象,这个对象将存储在程序的静态数据区中。这个对象只在函数首次调用时初始化一次,以后它将在两次函数调用之间保持它的值。

    char oneChar(const char* charArray = 0) {
        static const char* s;
        if(charArray) {
            s = charArray;
            return *s;
        }
        else
            require(s, "un-initialized s");
        if (*s == '\0') {
            return 0;
        }
        return *s++;
    }
    
    char* a = "abcdefghijk";
    
    int main(){
        oneChar(a);
        char c;
        //注意到while循环的oneChar并无带参数
        while ((c = oneChar() != 0)) {
            cout << c << endl;
        }
    }
    

猜你喜欢

转载自blog.csdn.net/qq_43118572/article/details/112494212