在學習c++一開始,我們就知道在使用型別、變數和函式時需要先定義。名字查詢的過程比較直截了當:
當然,對於定義在類內的成員函式中的名字與上述的查詢規則有所區別,類的定義分兩步處理:
首先,編譯成員的宣告
直到類全部可見後,才編譯函式體。
成員函式中使用的名字按照如下方式解析:
例如下面**:
#include
using
namespace std;
typedef
double money;
money price =10;
class
account
private
: money price =20;
typedef
int money;};
intmain()
輸出結果為:
double對於account::price型別money和account::getprice()返回值型別money,在他們之前出現且離他們最近的是typedef double money,所以型別是double。20
而account成員函式getprice()中的price,最近的是類內的price。
再看乙個**:
#include
class
abc;
void
del(abc *pobj)
// 下面的**將會報錯
/*void del(abc *pobj)
*/class
abc~
abc(
)void
show()
};intmain()
輸出:
abc因為del中的引數abc是之前宣告的abc,沒有析構函式。
c 的名字查詢
在c 中,函式編譯時檢查過程如下 第一步,執行名字查詢 name lookup 在呼叫類中查詢,並生成候選列表 若候選列表為空,再擴大查詢範圍 如名 字空間內,或父類 如此迴圈。如果最終無結果,那麼抱歉,就會提示你 名字未能找到 否則,編譯器跳到第二步。第二步,執行過載辨別 overload res...
C C 程式設計 名字查詢
名字查詢,是當程式 現乙個名字時,將其與引入它的宣告聯絡起來的過程 例如,為編譯 std cout std endl 編譯器進行了 對於函式和函式模板中的名字,名字查詢可以將同乙個名字和多個宣告聯絡起來,而且可能從實參依賴查詢中得到額外的宣告。還會進行模板實參推導,並將宣告的集合交給過載決議,由它選...
c 名字控制
如果內部型別的靜態變數未初始化,編譯器會將其初始化為零。但使用者自定義型別必須使用建構函式來初始化。內部連線的名字可以放在乙個標頭檔案中而不擔心鏈結時發生衝突。如通常放在標頭檔案中的static const c 預設內部連線 c預設外部連線 內聯函式在預設的情況下是內部連線的。全域性物件都是隱含為靜...