告訴編譯器某個東西的名稱和型別,但略去細節,比如:
extern int x; //物件object宣告
std::size_t numdigits(int number); //function宣告
class widget; //class宣告
templateclass graphnode; //模板template宣告
函式的declaration揭示了其簽名-signature,也就是引數和返回型別。乙個函式的簽名等同於該函式的型別。
定義是提供給編譯器一些宣告所遺漏的細節,比如:對乙個物件而言,定義是編譯器為此物件撥發記憶體的地點,對function或function template而言,定義提供了**本體,對class或class template而言,定義列出了它們的成員。
初始化是給物件賦予初值的過程,初始化由建構函式執行。所謂的default建構函式是乙個可被呼叫而不帶任何實際引數者,這樣的建構函式要不沒有引數,要不就是每個引數都有預設值。
class student
class widget
explicit可阻止該類被用來執行隱式型別轉換 - implicit type conversions,即如果該構造引數單獨為乙個int,任何乙個int數都有可能通過隱式型別轉換為該類的物件。但它們仍可以被用來進行顯式型別轉換 - explicit type conversions。
copy構造 - 以同型物件初始化自我物件 vs 等號賦值(過載等好操作符)- 從乙個物件拷貝其值到自我物件。
等號賦值只有當等號兩邊兩個物件都已經初始化之後,才會被呼叫,如果等號左邊物件為新物件被定義,那麼還是呼叫copy構造。
copy建構函式是個很重要的函式,定義了乙個物件如何passed by value。比如stl中的容器都是passed by value的,所以stl要裝自定義物件,必須提供copy構造。一般函式引數傳遞pass-by-reference-const是個更好的選擇。
建構函式 - ctor
析構函式 - dtor
摘自《effective c++》
c 宣告 定義 初始化
簡述 語言型別 物件 變數 型別是乙個抽象,規定物件的時空排布 物件是乙個實體。具有屬性和方法 操作 物件屬性和方法,是否可見,可索引,可修改。變數是實體名稱或者容器名稱,總之是個名稱。介於抽象模型和物理實現之間。c中應該是編譯器為物件方法屬性等所分配的具有空間時間特性的記憶體的名字。工具編譯器 預...
初始化 賦值 宣告 定義
初始化和賦值是兩個完全不同的操作 列表初始化 用花括號 來初始化變數,列表初始化下,如果損失精度會編譯錯誤,正常初始化則是warning 常見初始化方法 int a 1 int b int c 3 int d double e int f e warning int g error 預設初始化 定義...
C語言中的宣告 定義 初始化
變數宣告規定了變數的型別和名字1 任何c變數的宣告都由兩部分組成 型別以及一組類似表示式的宣告符 declarator 2 說明符 乙個或多個 宣告表示式列表 3變數宣告 int a unsigned int a 函式宣告 int max 乙個返回值為int型別的函式 指標宣告 int pp是int...