C++11增加了許多的特性,auto就是一個很明顯的例子。 還有就是typedid()獲取數據變量的類型
看下面簡短的代碼:
atuo: 很像java中的加強for循環....。
1 //獲取一個數據變量的類型 2 #include<iostream> 3 #include<stdlib.h> 4 5 int main() { 6 7 double db = 10.9; 8 double *ps = &db; 9 auto var =*ps; 10 std::cout<<typeid(var).name()<< std::endl; 11 getchar(); 12 return 0; 13 }
關於C++關於款字符的使用:
1 //關於寬字符的使用 2 #include<iostream> 3 4 #include<stdlib.h> 5 #include<locale> 6 7 int main(int argv ,char args []) { 8 9 setlocale(LC_ALL, "chs"); //這就是設定為本地,中文簡體 10 wchar_t * p2 = L"1234frd"; 11 std::wcout << p2 << std::endl; 12 wchar_t *pi = L"北京adas,你好!"; 13 std::wcout << pi <<std::endl; 14 15 getchar(); 16 return 0; 17 }
關於數組類型的使用:
1 //新數組的使用 2 #include<iostream> 3 #include<array> 4 #include<stdlib.h> 5 6 7 int main(int argv ,char args []) { 8 9 //array數據類型 10 11 std::array<double ,5>data={2,3,4,5,6}; 12 for (auto var : data) { 13 std::cout << "var =" << var << std::endl; 14 } 15 getchar(); 16 return 0; 17 }
對於這里,我們需要知道的是,array的建立實在棧的基礎上,所以最大尺寸不要大於1M ,不然會出現棧溢出。
而對於vector而言,是建立在堆上的,所以沒有溢出的說法。
4, C++新特性,lambda表達式(匿名函數)
1 //新數組的使用 2 #include<iostream> 3 #include<vector> 4 #include<algorithm> 5 #include<stdlib.h> 6 7 int main(int argv ,char args []) { 8 9 std::vector<int> myvec; 10 myvec.push_back(1); 11 myvec.push_back(2); 12 myvec.push_back(3); 13 myvec.push_back(4); 14 myvec.push_back(5); 15 int res = 0; 16 //lambda 表達式 求和 17 //&res直接操作一個變量,res等價於返回值,x代表參數 18 //每次充當迭代器指向的元素,大括號就是代碼 19 std::for_each(myvec.begin(), myvec.end(), [&res](int x) {res += x; }); 20 std::cout << res << std::endl; 21 std::cin.get(); 22 return 0; 23 }
上面的實例,做的就是一個一個從1~5的累加過程。采用迭代器實現lambda函數。
5. 函數包裝器管理內嵌函數:
對於這一個C++高級語法的作用:
第一: 可以用作設計執行接口,接口設計關卡,也可以用來計數。
第二: 可以內嵌到另一個函數,實現函數的內嵌。游戲開發中,經常使用到這種方法。
/* 函數包裝器管理內嵌函數 */ /* 以一個簡單的四則運算為例子 */ //#pragma warning(disable: 2064) #include<stdio.h> #include<iostream> #include<functional> template <typename T ,typename F> T run(T a , T b , F f) { return f(a , b); } int main(int argc , char * args []){ using std::function; double db = 12.9; //double * //加 減 乘 除 function<double(double,double)> Add = [](double a , double b) { return a+b; }; function<double(double, double)> Sub = [](double a, double b) { return a - b; }; function<double(double, double)> Mul = [](double a, double b) { return a*b; }; function<double(double, double)>Div = [](double a, double b) { return a / b; }; //定義一個函數數組 function<double(double, double)>p[]= { Add,Sub,Mul,Div }; char str[] = "+-*/"; int i = 0; for(auto fun : p ) std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(12,13,fun) <<std::endl; std::cin.get(); return 0; }
運行結果如圖:
當然對於函數包裝器而言,還是可以調用外部函數的。不然怎么彰顯它的高級二字。
代碼:
1 /* 函數包裝器管理內嵌函數 */ 2 /* 3 以一個簡單的四則運算為例子 4 */ 5 //#pragma warning(disable: 2064) 6 #include<stdio.h> 7 #include<iostream> 8 #include<array> 9 #include<functional> 10 11 template <typename T ,typename F> 12 T run(T a , T b , F f) { 13 14 return f(a , b); 15 } 16 double show(double a, double b) { 17 18 std::cout << "這是一個外部函數,被調用" << std::endl; 19 return (a+b); 20 } 21 int main(int argc , char * args []){ 22 23 using std::function; 24 double db = 12.9; //double * 25 //加 減 乘 除 26 function<double(double,double)> Add = [](double a , double b) { 27 return a+b; 28 }; 29 function<double(double, double)> Sub = [](double a, double b) { 30 return a - b; 31 }; 32 function<double(double, double)> Mul = [](double a, double b) { 33 return a*b; 34 }; 35 function<double(double, double)>Div = [](double a, double b) { 36 return a / b; 37 }; 38 //定義一個函數數組 39 function<double(double, double)>p[]= { Add,Sub,Mul,Div ,show}; 40 char str[] = "+-*/+"; 41 int i = 0; 42 for(auto fun : p ) 43 std::cout <<"12 "<<str[i++]<<" 13 ="<< run<double>(12,13,fun) <<std::endl; 44 std::cin.get(); 45 return 0; 46 }