06-引用
摘要:
我們經常使用#ifndef、#define、#endif來防止標頭檔案的內容被重複包含
◼#pragma once可以防止整個檔案的內容被重複包含
◼區別
#ifndef、#define、#endif受C\C++標準的支援,不受編譯器的任何限制
有些編譯器不支援#pragma once(較老編...
我們經常使用#ifndef、#define、#endif來防止標頭檔案的內容被重複包含 ◼#pragma once可以防止整個檔案的內容被重複包含 ◼區別 #ifndef、#define、#endif受C\C++標準的支援,不受編譯器的任何限制 有些編譯器不支援#pragma once(較老編譯器不支援,如GCC 3.4版本之前),相容性不夠好 #ifndef、#define、#endif可以針對一個檔案中的部分程式碼,而#pragma once只能針對整個檔案 複製程式碼
名詞解釋
◼ 在C語言中,使用指標(Pointer)可以間接獲取、修改某個變數的值 ◼ 在C++中,使用引用(Reference)可以起到跟指標類似的功能 ◼ 注意點 引用相當於是變數的別名(基本資料型別、列舉、結構體、類、指標、陣列等,都可以有引用) 對引用做計算,就是對引用所指向的變數做計算 在定義的時候就必須初始化,一旦指向了某個變數,就不可以再改變,“從一而終” 可以利用引用初始化另一個引用,相當於某個變數的多個別名 不存在【引用的引用、指向引用的指標、引用陣列】 ◼ 引用存在的價值之一:比指標更安全、函式返回值可以被賦值 接下來我們再來const--下一講會專門來講 欄位(ios開發者不會陌生),常引用,陣列的引用,表示式的引用 複製程式碼
常引用const
將main.m 改為mian.mm 檔案(以後若是同樣的操作,將不再贅述) ◼ const是常量的意思,被其修飾的變數不可修改 如果修飾的是類、結構體(的指標),其成員也不可以更改 ◼ 引用可以被const修飾,這樣就無法通過引用修改資料了,可以稱為常引用 const必須寫在&符號的左邊,才能算是常引用 ◼ const引用的特點 可以指向臨時資料(常量、表示式、函式返回值等) 可以指向不同型別的資料 作為函式引數時(此規則也適用於const指標) ✓ 可以接受const和非const實參(非const引用,只能接受非const實參) ✓ 可以跟非const引用構成過載 ◼ 當常引用指向了不同型別的資料時,會產生臨時變數,即引用指向的並不是初始化時的那個變數 int a = 20; int &page = age; 其中page就是一個引用 const 也是老生常談的問題 int a = 20; const int *page = age; page 被 const修飾,則page不可改變了,就是固定的值了 int a = 10; int *p = &a; *p = 30; cout << a << endl; 列印結果: 30 複製程式碼
陣列引用
int array[] = { 10, 20, 30 }; int (&rArray)[3] = array; cout << array << endl; cout << &rArray << endl; 列印結果 0x7ffeefbff54c 0x7ffeefbff54c 在函式呼叫,需要傳入陣列引數時,就可以傳入引用 void testArray(int (&array)[3]) { cout << "size:" << sizeof(array) << endl; for (int i = 0; i < sizeof(array)/4; i++) { cout << array[i] << endl; } } //sizeof 計算物件的大小 是位元組為單位的, sizeof(array)/4 就是有多小個int 資料 int array[] = { 10, 20, 30 }; testArray(array); 列印結果: size:12 10 20 30 複製程式碼
再舉幾個:chestnut:(列舉,結構體)
enum Season { Spring, Summer, Fall, Winter }; struct Student { int age; }; Season season; Season &rSeason = season; rSeason = Winter; cout << season << endl; Student stu; Student &rStu = stu; rStu.age = 20; cout << stu.age << endl; 看下列印結果: 3 20 複製程式碼