名字空間
:namespace,即名字空間,是指
識別符號的各種可見範圍。c++
標準程式庫
中的所有識別符號都被定義於乙個名為std的namespace中。使用「using namespace」可以使得後面不需要每次指定名字空間。
1)名字
空間除了
系統定義
的名字空間之外,還可以自定義,定義
名字空間用關鍵字「namespace」,使用
名字空間時用作用域解釋符號「::」指定。
2)不指定名字空間的變數或函式都是當前名字
空間下的變數或函式。
3)不定義名字
空間的情況下,都屬於全域性名字
空間。同乙個名字
空間可以定義多次。
4)名字
空間可以一層層巢狀,指定時也得一層層地指定,這樣很不方便,一般用別名代替就方便多了。
5) 名字空間的名字也可以省略,稱之為「無名名字
空間」,無名名字
空間經常被使用,其作用是「內部可以引用,而外部不能引用」。
c++標準輸入輸出
cout是標準輸出流物件,《是標準操作符。
cin是標準輸入流物件,>>是標準操作符。
endl是換行操作符。
他們都屬於c++標準庫,所以都在std的名字空間裡面。
更詳細的c++輸出格式控制可檢視:
函式過載:指在同一作用域內,可以有一組具有相同函式名,不同引數列表(個數不同/型別不同)的函式,引數可同可不同,這組函式被稱為過載函式。
函式過載的作用:
1)試想如果沒有函式過載機制,如在c中,你必須要這樣去做:為這個print函式取不同的名字,如print_int、print_string。這裡還只是兩個的情況,如果是很多個的話,就需要為實現同乙個功能的函式取很多個名字,如加入列印long型、char*、各種型別的陣列等等。這樣做很不友好!
2)類的建構函式跟類名相同,也就是說:建構函式都同名。如果沒有函式過載機制,要想例項化不同的物件,那是相當的麻煩!
3)操作符過載,本質上就是函式過載,它大大豐富了已有操作符的含義,方便使用,如+可用於連線字串等!
#include using namespace std;
double add(int i = 0, double j = 0)//編譯後函式名變為_z3addid
double add(double i = 0, int j = 0)//編譯後函式名變為_z3adddi
int main()
//半預設引數
double add2(int i, int j = 0)
int main()
引用傳遞
void swap(int& left, int& right)
指標傳遞
void swap(int* left, int* right)
指標傳遞和引用傳遞在效率上要優於值傳遞(可用gettickcount驗證)。
注意:當不希望函式內容改變引數的值時,盡量在使用時加上const。
傳值做返回值與傳引用做返回值
int add(int a, int b)
int add(int a, int b)
int main()
{ int a = 1;
int b = 1;
int c = add(a, b);
cout<
通過除錯進入反彙編檢視
結論:(
重點記憶)
1. 不要返回乙個臨時變數的引用。
2. 如果返回物件出了當前函式的作用域依舊存在,則最好使用引用返回,因為這樣更高效
引用和指標的區別和聯絡
1. 引用只能在定義時初始化一次,之後不能改變指向其它變數(從一而終),指標變數的值可變。
2. 引用必須指向有效的變數,指標可以為空。
3. sizeof指標物件和引用物件的意義不一樣。sizeof引用得到的是所指向的變數的大小,而sizeof指標是物件位址的大小。
4. 指標和引用自增(++)自減(--)意義不一樣。
5. 相對而言,引用比指標更安全。
總結:指標比引用更靈活,但是也更危險。使用指標時一定要注意
檢查指標是否為空。指標所指的位址釋放以後最好置0,否則可能存在野指標問題
C 入門基礎知識
1.c 基本資料型別 整型int 字元型 char 浮點型 float double 邏輯性 bool 無型別 void 也稱內建型別 語言內部 已定義好的型別 非基本資料型別 陣列 type 指標 type 結構體 struct 聯合體 union 列舉 enum 類 class 這些即就是自定義...
C 入門基礎知識
一 命名空間 命名空間 實際上就是乙個由程式設計者命名的記憶體區域,程式設計者可以根據需要指定一些有名字的空間域,把一些全域性實體分別放在各個命名空間中,從而與其他全域性實體分隔開來。它相當於乙個更加靈活的檔案域 全域性域 可以用花括號把檔案的一部分括起來,並以關鍵字namespace開頭給它起乙個...
C 入門基礎知識
命名空間 命名空間,就是根據需要指定的一些有名字的記憶體區域。把一些全域性實體分別放在各個命名空間中,從而與全域性實體分隔開。如 namespace my namespace you 其中namespace是定義命名空間所必須寫的關鍵字,my和you是自己定義的命名空間的名字 可用任意合法的識別符號...