C 程式設計思想 2nd卷一 名字控制

2021-05-25 17:22:28 字數 843 閱讀 1700

在c和c++中,static都有兩種基本的含義,並且這兩種含義經常是互相衝突的:

1.在固定的位址上進行儲存分配,也就是說物件是在乙個特殊的靜態資料區上建立的,而不是每次函式呼叫時在堆疊上產生的。這也是靜態儲存的概念。

2.對乙個特定的編譯單元來說是區域性的。這樣,static控制名字的可見性,所以這個名字在這個單元或類之外是不可見的。這也描述了連線的概念,它決定聯結器將看到哪些名字。

零賦值只對內部型別有效,使用者自定義型別必須用建構函式來初始化。

在檔案作用域內,乙個被宣告為static的物件或函式的名字對翻譯單元來說是區域性於該單元的。這些名字有內部連線。這意味著可以在其他的翻譯單元中使用同樣的名字,而不會發生名字衝突。

用可見性術語來講,static的反義是extern,它明確地宣告了這個名字對所有的翻譯單元都是可見的。

namespace的特徵:

1.namespace只能在全域性範圍內定義,但它們之間可以互相巢狀。

2.在namespace定義的結尾,右花括號的後面不必跟乙個分號。

3.乙個namespace可以在多個標頭檔案中用乙個表示符來定義,就好像重複定義乙個類一樣。

4.乙個namespace的名字可以用另乙個名字來作它的別名,這樣就不必敲打哪些開發商提供的冗長的名字了。

5.不能像類那樣取建立乙個名字空間的例項。

在乙個名字空間中引用乙個名字可以採用三種方法:

1.用作用域運算子(::)。

2.用using指令把所有名字引入到名字空間中(using namespace 空間名)。

3.用using宣告一次性引用名字。

因為靜態成員函式沒有this指標,所以它既不能訪問非靜態的資料成員,也不能呼叫非靜態的成員函式。

C 程式設計思想 2nd卷一 模板簡介

標頭檔案 模板定義很特殊。在template 之後的任何東西都意味著編譯器在當時不為它分配儲存空間,而是一直處於等待狀態直到被乙個模板示例告知。在編譯器和聯結器中有機制能去掉同一模板的多重定義。所以為了使用方便,幾乎總是在標頭檔案中放置全部的模板宣告和定義。當建立乙個巢狀friend類的時候,必須經...

C 程式設計思想 2nd卷一 動態物件建立

當建立乙個c 物件時,會發生兩件事 1.為物件分配記憶體。2.呼叫建構函式來初始化那個記憶體。如果想對乙個void 型別指標進行delete操作,要注意這將可能成為乙個程式錯誤,除非指標所指的內容是非常簡單的,因為,它將不執行析構函式。object a new object 40,a delete ...

C 程式設計思想 2nd卷一 函式過載與預設引數

在c 中,struct和class唯一的不同之處就在於,struct預設為public,而class預設為private。在使用預設引數時必須記住兩條規則 1.只有引數列表的後部引數才是可預設的,也就是說,不可以在乙個預設引數後面又跟乙個非預設的引數。2.一旦在乙個引數呼叫中開始使用預設引數,那麼這...