staticキーワードサマリの使用

インタビューに、静止画のみの違いの多くを自分自身を見つけるために、C ++言語の詳細を確認します。

静的 int型 I1 = 1 ;
静的 int型 I2 = 1 ;
int型i3は、
静的 int型I4。
INT メイン()
{ 
    静的 INT I5 = 1 int型 I6 = 1 ;
    int型i7プロセッサー; 
    coutの <<&I1 << "  " << I1 << てendl; 
    coutの <<&I2 << "  " << I2 << てendl; 
    coutの <<&I3 << "  " << I3 << てendl;"  " << I4 << てendl; 
    coutの <<&i5の<< "  " << i5の<< てendl; 
    coutの <<&I6 << "  " << I6 << てendl; 
    coutの <<&i7プロセッサー<< "  " << i7の<< てendl; 
    getchar(); 
}

出力:

 

 

 まず、その値:

ノーマル/静的なグローバル変数(I3)は、デフォルトで0に初期化され、ローカル変数の共通の初期値が定義されていません(I7)

静的ローカル変数である静的ローカル変数は、0に初期化されます

メモリ記憶場所に加えて:

まず、プロセスのメモリマップを置きます:

 

 

これは初期化されていない静的な初期エリア+領域です。なお、静的領域および定常領域は、1 INT A = 1:このような定数として、同じではありません。またはchar * X = "123"、 "123"

 

 ビューの二つの絵にこの対応は非常に明確です

 

 

さて、以下のテーマを入力します。

グローバル変数は静的かどうかにかかわらず、静的変数の領域にあります

スタック領域/ヒープ上の普通のローカル変数、静的変数領域内の静的ローカル変数。

 

静的な異なる用途:

1.static全局变量/函数,因为函数肯定是全局的了,所以这俩捏一起说。

只有一个用途:不让其他cpp使用自己,即限制作用域为所在的cpp。如果不带static,其他cpp可以extern修饰进而引用。

所以假设a.cpp里有一个函数f。

如果我们让其他cpp引用这个f函数。那么我们应该把f的声明加入到a.cpp的头文件并且声明时不要加static,这样会导致每个包含a.h的cpp都有一份该函数f的副本,大大增加编译效率!当然这个问题回头另外写一篇博客,就先点到为止。另外永远不要在头文件中定义变量!

如果我们不想让其他cpp引用f函数,则我们直接在f的定义前加上static修饰,这样其他cpp就看不到f函数了(即使包含a头文件的情况下也是看不到的)。

2.static局部变量,如:

void f(){
    static int cnt=0;cnt++;
}

这个函数调用几次,cnt就等于几。

static局部变量和全局变量一起存在静态变量区,二者唯一的区别就是:static局部变量作用域只限于所在的函数,但到达函数以外时并不会释放,而是会保持已有的值继续等待下次调用。

static局部变量只会初始化一次!直到cpp退出才会释放。

3.类中的static成员变量(类的静态成员变量):

在所有该类的实例(对象)中只存在一个副本,所有对象共享一个该静态变量。

类的静态成员变量需要在类中声明,类外定义,例子如下:

class A{
    static int x;
};
int A::x=1;

 

4.类中的static成员函数:

只能调用静态成员变量,别的和普通成员函数区别不大。

概括来说:类的静态成员函数、变量的存储位置不在类里,所以也就理所当然的没有this指针。所以静态成员函数无法调用普通成员变量也就合理了(因为没有this指针,根本找不到相应的变量位置!)。

由于二者都与类绑定,而不与特定对象绑定,所以二者可以除了可以通过对象访问外,还可以通过类名访问(A:: f();)。

 

おすすめ

転載: www.cnblogs.com/FdWzy/p/12424308.html