靜態關鍵字通常與內部鏈接有關,但類內使用的靜態關鍵字有外部鏈接權限?下面的變量m,n可以在類文件外部訪問。靜態關鍵字內部和外部
class c {
int i;
int j;
static int m;
static int n;
public:
void zap();
static void clear();
};
靜態關鍵字通常與內部鏈接有關,但類內使用的靜態關鍵字有外部鏈接權限?下面的變量m,n可以在類文件外部訪問。靜態關鍵字內部和外部
class c {
int i;
int j;
static int m;
static int n;
public:
void zap();
static void clear();
};
沒錯。
關鍵字static
在很大程度上超載太多不同的含義:
非類含義大多與在C:http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program –
可以說,靜態成員是類的成員,而不是任何特定的對象實例。也就是說,它們對於所有對象實例具有相同的值。
靜態成員函數雖然沒有值,但在其他方面是相同的。它們可以被視爲類的一部分,而不是每個對象實例都是唯一的。這意味着它們沒有this
指針,並且無法訪問非靜態成員變量。
成員函數通常不會被認爲具有*值*。 ;-) – oldrinb
正如我在my comment,static
中所述,那些僅與類別相關聯的成員而不是單個對象。
static
成員屬於類;對於變量,它們可以在沒有對象的情況下訪問,並在實例中共享struct Foo { static void *bar; static void *fu(); }
所以
Foo::bar
和Foo::fu
是合法的。
它們在C++ 03標準的§ 9.4中引入;
一類的數據或功能部件可以聲明在類定義
static
,在這種情況下,它是一個靜態成員的類的。甲
static
構件X
類的s
可以被稱爲使用合格-ID表達X::s
;沒有必要使用類成員訪問語法(5.2.5)來引用static
成員。甲static
構件可被稱爲使用類的成員訪問語法,在這種情況下對象表達式被評估class process { public: static void reschedule(); }; process& g(); void f() { process::reschedule(); // OK: no object necessary g().reschedule(); // g() is called }
甲
static
構件可以直接在其類的範圍中或在範圍被稱爲從班級派生的班級(第10條);在這種情況下,static
構件被稱爲是否使用了合格-ID表達,與嵌套名稱說明符的合格-ID命名從中static
構件被引用類範圍的。int g(); struct X { static int g(); }; struct Y : X { static int i; }; int Y::i = g(); // equivalent to Y::g();
...
'static'成員屬於*類*;對於變量,它們可以在沒有對象的情況下訪問,並在實例中共享'struct Foo {static void * bar; static void * fu(); }',所以'Foo :: bar'和'Foo :: fu'是合法的。 – oldrinb
這不是嚴格的標準要求,但可能(或可能不會!)不由自主的想到靜態成員爲在編譯時設置的固定地址的意義靜態的,而非靜態成員數據可以在棧上放或堆在各種運行時確定的地址。靜態成員基本上像全局變量,除了它們的標識符屬於聲明它們的類的範圍。 –