第一天:
1.四種不同的方式來實現add函數
//面向過程 int add1(int a, int b) { return a + b; } //面向對象 class ADD{ public: int operator()(int a, int b) { return a + b; } }; //泛型編程 template<typename T, typename U> auto add3(T a, U b) -> decltype(a + b) { return a + b; } //函數式編程 auto add4 = [](int a, int b) -> int{ return a + b; }; int main() { ADD add2; cout << add1(3, 4) << endl; cout << add2(3, 4) << endl; cout << add3(3, 4) << endl; cout << add4(3, 4) << endl; return 0; }
2.函數和數組在本質上都是映射.
數組的下標可以看作傳入的參數;
函數比較消耗計算資源;數組比較消耗存儲資源
函數:壓縮的數組 <-> 數組:展開的函數
兩者轉換: 時間換空間與空間換時間.
3.編譯和鏈接
使用nm -C可以查看文件中的符號的信息,當前函數有數字代表當前函數的定義存儲在當前文件中的.
可以看到單獨的.o文件中只是存儲自己文件中定義的函數;而總的可執行文件a.out則存儲所有需要用到的函數.
4.googletest使用
(1)第三方測試框架和被測代碼的邏輯
(2)googletest下載與編譯
git clone https://github.com/google/googletest.git
去執行makefile指令去編譯這個工程,如果g++不是默認指定c++11,則需要在其中添加
CMakeList.txt中:
新建build文件夾,在其中執行cmake,make的指令.
然后將產生的include和lib文件夾挪到外邊自己代碼的目錄(當然不挪也行,只是路徑長一些).
5.printf的有趣用法,輸出彩色文字
中間必須為";",且之間不能有空格.
g++ main.cpp -I include -L lib -std=c++11 -lpthread -lgtest
//可以把這部分加到makefile中
all: g++ main.cpp -I include -L lib -std=c++11 -lpthread -lgtest
然后只需make,就可以執行這個makefile文件了.
得到如下結果: