Aracılığıyla paylaş


Statik (C++)

static Anahtar sözcüğünü, değişkenler, İşlevler, sınıf veri üyeleri ve sınıf işlevlerini bildirmek için kullanılabilir.

Varsayılan olarak, bir nesne veya tüm blokları tanımlanan değişkeni statik süre ve dış bağlantı vardır.Statik süre program başlatıldığında ve program sona erdiğinde deallocated nesne veya değişken tahsis edildiği anlamına gelir.Dış bağlantı değişkenin adını değişken olarak bildirildiğinden dosyanın dışında görünür olduğunu gösterir.Buna karşılık, iç bağlantı adı değişkeni olarak bildirilen dosyanın dışında görünür değildir anlamına gelir.

static Anahtar sözcüğünü aşağıdaki durumlarda kullanılabilir.

  • Ne zaman bildirdiğiniz bir değişken ya da dosya kapsamında işlevi (genel ve/veya ad kapsamı), static anahtar değişken ya da işlevi iç bağlantı olduğunu belirtir.Bir değişken bildirdiğinizde, değişkeni statik süresi olan ve başka bir değer belirtmediğiniz sürece derleyici onu 0 olarak başlatır.

  • Bir işlev içinde bir değişken bildirdiğinizde static anahtar sözcüğünü belirtir değişkeni bu işlev çağrıları arasında kendi durumunu korur.

  • Sınıf bildirimindeki bir veri üyesi bildirirken static anahtar sözcüğünü belirtir bir kopyasını üye sınıfın bütün örnekleri tarafından paylaşılır.Dosya kapsamında statik veri üyesi tanımlanmalıdır.Olarak bildirdiğiniz bir tam sayı veri üyesi conststatic bir başlatıcı olabilir.

  • Sınıf bildirimindeki bir üye işlev bildirirken static anahtar sözcüğünü belirtir işlevi sınıfın bütün örnekleri tarafından paylaşılır.İşlev bir örtülü olmadığı için statik bir üye işlev örnek üyesine erişemez this işaretçisi.Örnek üyesine erişmek için bir örnek işaretçi ya da başvuru parametresi işleviyle bildirin.

  • UNION olarak statik üyeleri bildirimini yapamazsınız.Ancak, genel olarak bildirilmiþ bir anonim Birliği açıkça bildirilmelidir static.

Daha fazla bilgi için bkz: auto, extern, ve kayıt.

Örnek

Nasıl bir değişken olarak bildirilen aşağıdaki örnekte gösterildiği static bir işlev bu işlev çağrıları arasında kendi durumunu korur.

// static1.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
void showstat( int curr ) {
   static int nStatic;    // Value of nStatic is retained
                          // between each function call
   nStatic += curr;
   cout << "nStatic is " << nStatic << endl;
}

int main() {
   for ( int i = 0; i < 5; i++ )
      showstat( i );
}
  

Aşağıdaki örnek kullanımını gösterir static bir sınıf.

// static2.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;
class CMyClass {
public:
   static int m_i;
};

int CMyClass::m_i = 0;
CMyClass myObject1;
CMyClass myObject2;

int main() {
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject1.m_i = 1;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   myObject2.m_i = 2;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;

   CMyClass::m_i = 3;
   cout << myObject1.m_i << endl;
   cout << myObject2.m_i << endl;
}
  

Aşağıdaki örnekte gösterildiği bildirilen yerel değişken static bir üye işlev içinde.Statik değişken tam program için kullanılabilir; hepsinin türündeki statik değişken aynı kopyasını paylaşır.

[!NOT]

Çok iş parçacıklı bir uygulamasında statik yerel bir değişkene değer atama iş parçacığı güvenli değildir ve bunu bir programlama yöntemi olarak önerilmez.

// static3.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
struct C {
   void Test(int value) {
      static int var = 0;
      if (var == value) 
         cout << "var == value" << endl;
      else
         cout << "var != value" << endl;

      var = value;
   }
}; 

int main() {
   C c1;
   C c2;
   c1.Test(100);
   c2.Test(100);
}
  

Ayrıca bkz.

Başvuru

C++ anahtar sözcükler

C++ depolama sınıfları

Statik depolama sınıfı belirteçleri

Durağan üye işlevleri

Erişim denetimi ve Static üyeler