日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++11 特性

發布時間:2024/1/8 c/c++ 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++11 特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

C++11簡介?

{} 初始化

std::initializer_list

auto

decltype

nullptr?

?范圍for循環

C++98的循環方式:

C++11的范圍遍歷:

智能指針

1. 為什么需要智能指針?

2.什么是內存泄漏?

2.1內存泄漏的分類

2.2如何避免內存泄漏

3.智能指針的使用及原理

3.1RAII

3.2智能指針的原理

還有常見的三種智能指針類型:

STL中的一些變化

右值引用和移動語義?

什么是左值?什么是左值引用呢?

?什么是右值?什么是右值引用?

左值引用和右值引用的比較?

左值引用總結:

?右值引用的總結:

??右值引用的場景和意義:

右值引用左值:

完美轉發

新的類功能?

強制生成的默認關鍵詞default:

?禁止生成默認成員函數的關鍵詞delete:

可變參數模板?

用遞歸的方式展開參數包:

逗號表達式展開參數包:

?編輯

STL中的emplace接口:?

lambda表達式

lambda表達式語法:

?函數對象與lambda表達式:

總結:


C++11簡介?

在2003年C++標準委員會曾經提交了一份技術勘誤表(簡稱TC1),使得C++03這個名字已經取代了
C++98稱為C++11之前的最新C++標準名稱。不過由于C++03(TC1)主要是對C++98標準中的漏洞
進行修復,語言的核心部分則沒有改動,因此人們習慣性的把兩個標準合并稱為C++98/03標準。
從C++0x到C++11,C++標準10年磨一劍,第二個真正意義上的標準珊珊來遲。相比于
C++98/03,C++11則帶來了數量可觀的變化,其中包含了約140個新特性,以及對C++03標準中
約600個缺陷的修正,這使得C++11更像是從C++98/03中孕育出的一種新語言。
相比較而言,
C++11能更好地用于系統開發和庫開發、語法更加泛華和簡單化、更加穩定和安全,不僅功能更
強大,而且能提升程序員的開發效率,公司實際項目開發中也用得比較多,所以我們要作為一個
重點去學習。
由于C++11的新增語法特性篇幅特別多,所以文章也講解實際中比較實用的語法


{} 初始化

在C++98中,標準允許使用{}對數組或者結構體元素進行統一的列表初始值設定,比如:

struct Point {int _x;int _y; }; int main() {int array1[] = { 1, 2, 3, 4, 5 };int array2[5] = { 0 };Point p = { 1, 2 };return 0; }

?C++11中擴大了{}的使用范圍,使其可用于所有的內置類型和用戶自定義的類型,使用初始化列表的時候 = 可加可不加

struct Point {int _x;int _y; }; int main() {int x1 = 1;int x2{ 2 };int array1[]{ 1, 2, 3, 4, 5 };int array2[5]{ 0 };Point p{ 1, 2 };// C++11中列表初始化也可以適用于new表達式中int* pa = new int[4]{ 0 };//標準容器vector<int> v{1,2,3,4,5};//代替了push_back一個一個插入提高代碼效率map<int, int> m{{1,1}, {2,2,},{3,3},{4,4}};return 0; }

創建對象的時候也可以使用列表初始化方式調用構造函數初始化

class Date { public:Date(int year, int month, int day):_year(year),_month(month),_day(day){cout << "Date(int year, int month, int day)" << endl;} private:int _year;int _month;int _day; }; int main() {Date d1(2022, 1, 1); // old style// C++11支持的列表初始化,這里會調用構造函數初始化Date d2{ 2022, 1, 2 };Date d3 = { 2022, 1, 3 };return 0; }

std::initializer_list

?initializer? 的使用:

int main() {vector<int> v = { 1,2,3,4 };list<int> lt = { 1,2 };// 這里{"sort", "排序"}會先初始化構造一個pair對象map<string, string> dict = { {"sort", "排序"}, {"insert", "插入"} };// 使用大括號對容器賦值v = {10, 20, 30};return 0; }

讓模擬實現的vector也可以實現用{}賦值

template<class T> class vector { public:typedef T* iterator;vector(initializer_list<T> l){_start = new T[l.size()];_finish = _start + l.size();_endofstorage = _start + l.size();iterator vit = _start;typename initializer_list<T>::iterator lit = l.begin();while (lit != l.end()){*vit++ = *lit++;}}vector<T>& operator=(initializer_list<T> l) {vector<T> tmp(l);std::swap(_start, tmp._start);std::swap(_finish, tmp._finish);std::swap(_endofstorage, tmp._endofstorage);return *this;} private:iterator _start;iterator _finish;iterator _endofstorage; };

auto

在C++98中auto是一個存儲類型的說明符,表明變量是局部自動存儲類型,但是局部域中定義局
部的變量默認就是自動存儲類型,所以auto就沒什么價值了。C++11中廢棄auto原來的用法,將
其用于實現自動類型推斷。這樣要求必須進行顯示初始化,讓編譯器將定義對象的類型設置為初
始化值的類型。

?

int main() {int i = 10;auto p = &i;auto pf = strcpy;cout << typeid(p).name() << endl; cout << typeid(pf).name() << endl;map<string, string> dict = { {"sort", "排序"}, {"insert", "插入"} };auto it = dict.begin();cout<<typeid(it).name()<<endl;return 0; }

decltype

作用:將變量的聲明類型作為表達式指定的類型?

使用場景:

template<class T1, class T2> void F(T1 t1, T2 t2) {decltype(t1 * t2) ret;cout << typeid(ret).name() << endl; } int main() {const int x = 1;double y = 2.2;decltype(x * y) ret; // ret的類型是doubledecltype(&x) p; // p的類型是int*cout << typeid(ret).name() << endl;cout << typeid(p).name() << endl;F(1, 'a');return 0; }

nullptr?

由于C++中NULL被定義成字面量0,這樣就可能回帶來一些問題,因為0既能指針常量,又能表示
整形常量。所以出于清晰和安全的角度考慮,C++11中新增了nullptr,用于表示空指針
#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif
?


?范圍for循環

C++98的循環方式:

int arr[] = { 3,4,2,1,5,6};// 下標遍歷for(int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i){std::cout << arr[i] << " ";}// 指針遍歷for(int* p = arr; p < arr + sizeof(arr) / sizeof(arr[0]); ++p){std::cout << *p << " ";}

C++11的范圍遍歷:

C++98的for循環遍歷的特點就是要寫明一個明確的范圍,如果我們需要完整的遍歷一個數組或者集合或者容器(map)的時候,可以讓編譯器來自動推算范圍。這就引出C++11的范圍for。

int arr[] = { 3,4,2,1,5,6};// 下標遍歷for(int &e : arr){cout << e <<" ";}//使用auto的話會更簡單for(auto &e : arr){cout << e <<" ";}//不明確的區間不能范圍forint *p = arr;for(auto &e : p)//范圍不確定,運行報錯{cout << e <<" ";}

但是范圍遍歷并不適用于所有情況,范圍遍歷的前提條件就是迭代的區間范圍都是確定的。比如一般的容器vector,map,set,string,list.用戶自己實現的類要想實現的話需要自行提供自增運算符重載和賦值運算符重載?

智能指針

1. 為什么需要智能指針?

int div() {int a, b;cin >> a >> b;if (b == 0)throw invalid_argument("除0錯誤");return a / b; } void Func() {int* p1 = new int; //當p1和p2被正常的new出來int* p2 = new int;cout << div() << endl;//調用div時候如果輸入的b為0,那么根據異常的特性會在這里直接返回//這樣直接跳過下面的delete了,導致了內存泄漏 delete p1;delete p2; } int main() {try{Func();//這里捕捉異常}catch (exception& e){cout << e.what() << endl;}return 0; }

分析上述代碼。

2.什么是內存泄漏?

內存泄漏指的是,人為的疏忽導致程序未能釋放已經不再使用的內存的情況。內存泄漏指的并不是內存在物理上的消失,而是程序員分配某段內存后,失去了對該段內存的控制,造成內存浪費

內存泄漏的危害:長期運行的程序出現內存泄漏,影響很大,如操作系統、后臺服務等等,出現
內存泄漏會導致響應越來越慢,最終卡死。

2.1內存泄漏的分類

  • 堆內存泄露*(Heap?leak)

????????堆內存指的是程序執行中依據須要分配通過malloc / calloc / realloc / new等從堆中分配的一
????????塊內存,用完后必須通過調用相應的 free或者delete 刪掉。假設程序的設計錯誤導致這部分
????????內存沒有被釋放,那么以后這部分空間將無法再被使用,就會產生Heap Leak。

  • 系統資源泄露

????????指程序使用系統分配的資源,比方套接字、文件描述符、管道等沒有使用對應的函數釋放
????????掉,導致系統資源的浪費,嚴重可導致系統效能減少,系統執行不穩定

2.2如何避免內存泄漏

1. 工程前期良好的設計規范,養成良好的編碼規范,申請的內存空間記著匹配的去釋放。ps:
這個理想狀態。但是如果碰上異常時,就算注意釋放了,還是可能會出問題。需要下一條智
能指針來管理才有保證。
2. 采用RAII思想或者智能指針來管理資源
3. 有些公司內部規范使用內部實現的私有內存管理庫。這套庫自帶內存泄漏檢測的功能選項。
4. 出問題了使用內存泄漏工具檢測。ps:不過很多工具都不夠靠譜,或者收費昂貴。


內存泄漏非常常見,解決方案分為兩種:1、事前預防型。如智能指針等。2、事后查錯型。如泄漏檢測工具
?

3.智能指針的使用及原理

3.1RAII

RAII(Resource Acquisition Is Initialization)是一種利用對象生命周期來控制程序資源(如內
存、文件句柄、網絡連接、互斥量等等)的簡單技術
在對象構造時獲取資源,接著控制對資源的訪問使之在對象的生命周期內始終保持有效,最后在
對象析構的時候釋放資源
。借此,我們實際上把管理一份資源的責任托管給了一個對象

優點:1.不需要顯示的釋放資源 2.這種方式同時可以保證對象所需的資源在其生命周期內始終有效

// 使用RAII思想設計的SmartPtr類 template<class T> class SmartPtr { public:SmartPtr(T* ptr = nullptr): _ptr(ptr){}~SmartPtr(){if(_ptr)delete _ptr;} private:T* _ptr; };

3.2智能指針的原理

上述的SmartPtr還不能稱作智能指針,因為他還不具備指針的行為。指針可以解引用,可以通過->訪問他的成員。因此AutoPtr模板中還需要重載 * ,->

template<class T> class SmartPtr { public:SmartPtr(T* ptr = nullptr): _ptr(ptr){}~SmartPtr(){if(_ptr)delete _ptr;}T& operator*() {return *_ptr;}T* operator->() {return _ptr;} private:T* _ptr; }; struct Date {int _year;int _month;int _day; }; int main() {SmartPtr<int> sp1(new int);*sp1 = 10cout<<*sp1<<endl;SmartPtr<int> sparray(new Date);// 需要注意的是這里應該是sparray.operator->()->_year = 2018;// 本來應該是sparray->->_year這里語法上為了可讀性,省略了一個->sparray->_year = 2018;sparray->_month = 1;sparray->_day = 1; }

總結一下:智能指針的原理 1.RAII 2.將類重載*,->使其具備指針的行為?

還有常見的三種智能指針類型:

  • std::auto_ptr
  • std::unique_ptr
  • std::shared_ptr

  • STL中的一些變化

    ?實際中最有用的就是:unordered_map和unordered_set在上片博客講了unordered_map和map的區別。https://blog.csdn.net/Obto_/article/details/128388643?spm=1001.2014.3001.5502

    實際上更新了C++11后,容器中增加的新方法->插入接口函數的右值版本,都說這樣可以增加效率,具體的看下文對右值的詳細講述。


    右值引用和移動語義?

    傳統的C++語法中就有引用的語法,而C++11中新增了的右值引用語法特性,所以從現在開始我們
    之前學習的引用就叫做左值引用。無論左值引用還是右值引用,都是給對象取別名。

    什么是左值?什么是左值引用呢?

    左值是一個數據的表達式,我們可以取他的地址,可以對他賦值,左值可以出現在賦值符號的左邊,而右值不能出現在賦值符號的左邊。定義const的左值就不能給他賦值,但可以對他取地址。

    左值引用就是給左值取別名。?

    int main() {// 以下的p、b、c、*p都是左值int* p = new int(0);int b = 1;const int c = 2;// 以下幾個是對上面左值的左值引用int*& rp = p;int& rb = b;const int& rc = c;int& rp = *p;return 0; }

    ?什么是右值?什么是右值引用?

    右值也是一個表達數據的表達式,比如:字面常量,表達式返回值,函數返回值(這個不能是左值引用的返回值)等等,右值可以出現在賦值符號的右邊,但是不能出現出現在賦值符號的左邊,右值不能取地址。右值引用就是對右值的引用,給右值取別名。

    int main() {double x = 1.1, y = 2.2;// 以下幾個都是常見的右值10;x + y;fmin(x, y);// 以下幾個都是對右值的右值引用int&& rr1 = 10;double&& rr2 = x + y;double&& rr3 = fmin(x, y);// 這里編譯會報錯:error C2106: “=”: 左操作數必須為左值10 = 1;x + y = 1;fmin(x, y) = 1;return 0; }

    需要注意的是:右值是不能取地址,但可以取別名,當給右值取別名后會導致右值被存儲到特定的位置。可以對右值的別名進行左值的操作。


    ?

    左值引用和右值引用的比較?

    左值引用總結:

    1.左值引用只能引用左值,不能引用右值?

    2.但是const左值既可以引用左值,也可以引用右值

    int main() {// 左值引用只能引用左值,不能引用右值。int a = 10;int& ra1 = a; // ra為a的別名//int& ra2 = 10; // 編譯失敗,因為10是右值// const左值引用既可引用左值,也可引用右值。const int& ra3 = 10;const int& ra4 = a;return 0;}

    ?右值引用的總結:

    1.右值引用只能引用右值,不能引用左值

    2.但是右值引用可以用move后的左值

    int main() {// 右值引用只能右值,不能引用左值。int&& r1 = 10;// error C2440: “初始化”: 無法從“int”轉換為“int &&”// message : 無法將左值綁定到右值引用int a = 10;int&& r2 = a;// 右值引用可以引用move以后的左值int&& r3 = std::move(a);return 0; }

    ??右值引用的場景和意義:

    #include<assert.h> namespace gch {class string{public:typedef char* iterator;iterator begin(){return _str;}iterator end(){return _str + _size;}string(const char* str = ""):_size(strlen(str)), _capacity(_size){//cout << "string(char* str)" << endl;_str = new char[_capacity + 1];strcpy(_str, str);}// s1.swap(s2)void swap(string& s){::swap(_str, s._str);::swap(_size, s._size);::swap(_capacity, s._capacity);}// 拷貝構造string(const string& s):_str(nullptr){cout << "string(const string& s) -- 深拷貝" << endl;string tmp(s._str);swap(tmp);}// 賦值重載string& operator=(const string& s){cout << "string& operator=(string s) -- 深拷貝" << endl;string tmp(s);swap(tmp);return *this;}// 移動構造string(string&& s):_str(nullptr), _size(0), _capacity(0){cout << "string(string&& s) -- 移動語義" << endl;swap(s);}// 移動賦值string& operator=(string&& s){cout << "string& operator=(string&& s) -- 移動語義" << endl;swap(s);return *this;}~string(){delete[] _str;_str = nullptr;}char& operator[](size_t pos){assert(pos < _size);return _str[pos];}void reserve(size_t n){if (n > _capacity){char* tmp = new char[n + 1];strcpy(tmp, _str);delete[] _str;_str = tmp;_capacity = n;}}void push_back(char ch){if (_size >= _capacity){size_t newcapacity = _capacity == 0 ? 4 : _capacity * 2;reserve(newcapacity);}_str[_size] = ch;++_size;_str[_size] = '\0';}//string operator+=(char ch)string& operator+=(char ch){push_back(ch);return *this;}const char* c_str() const{return _str;}private:char* _str;size_t _size;size_t _capacity; // 不包含最后做標識的\0}; }int main() {gch::string s1("ai");return 0; }

    左值引用的使用場景:

    void func1(bit::string s) {} void func2(const bit::string& s) {} int main() {bit::string s1("hello world");// func1和func2的調用我們可以看到左值引用做參數減少了拷貝,提高效率的使用場景和價值func1(s1);func2(s1);//但左值引用能做的不夠全面,比如傳值返回的時候就會存在深拷貝// string operator+=(char ch) 傳值返回存在深拷貝// string& operator+=(char ch) 傳左值引用沒有拷貝提高了效率s1 += '!';return 0; }

    左值引用的短板:? 當函數返回對象是一個局部變量,出了函數作用域就不存在了,就不能使用左值引用進行返回,只能傳值返回。例如:gch::string to_string(int value)函數中可以看到,這里只能傳值返回,傳值返回會導致至少一次的深拷貝(舊的編譯器如果沒有優化的話可能會有兩次深拷貝)

    ?

    右值引用和移動語義解決上述的問題:

    在gch::string中新增了移動構造,移動構造本質使用其他人的資源來構造自己,這樣就不用深拷貝了。

    string(string&& s):_str(nullptr),_size(0),_capacity(0) {cout << "string(string&& s) -- 移動語義" << endl;swap(s); } int main() {bit::string ret2 = bit::to_string(-1234);return 0; }

    在移動構造中沒有開空間,沒拷貝數據,所以效率提高了

    下列是移動賦值:

    //移動賦值 string& operator=(string&& s) {cout << "string& operator=(string&& s) -- 移動語義" << endl;swap(s);return *this; } int main() {bit::string ret1;ret1 = bit::to_string(1234);return 0; }

    ::STL容器都增加了移動拷貝和移動賦值


    右值引用左值:

    按照語法,右值引用只能引用右值,但右值引用一定不能引用左值的嗎?答案顯然是否定的,在很多場景下需要右值引用去引用左值實現移動語義,當需要右值引用一個左值的時候,可以使用move函數,move(左值)這樣可以將左值強轉成右值,就可以進行對左值的移動了

    int main() {gch::string s1("hello world");// 這里s1是左值,調用的是拷貝構造gch::string s2(s1);// 這里我們把s1 move處理以后, 會被當成右值,調用移動構造// 但是這里要注意,一般是不要這樣用的,因為我們會發現s1的// 資源被轉移給了s3,s1被置空了。gch::string s3(std::move(s2));return 0; }

    完美轉發

    模板中的&&萬能引用?

    void Fun(int &x){ cout << "左值引用" << endl; } void Fun(const int &x){ cout << "const 左值引用" << endl; } void Fun(int &&x){ cout << "右值引用" << endl; } void Fun(const int &&x){ cout << "const 右值引用" << endl; }// 模板中的&&不代表右值引用,而是萬能引用,其既能接收左值又能接收右值。 // 模板的萬能引用只是提供了能夠接收同時接收左值引用和右值引用的能力, // 但是引用類型的唯一作用就是限制了接收的類型,后續使用中都退化成了左值, // 我們希望能夠在傳遞過程中保持它的左值或者右值的屬性, 就需要用我們下面學習的完美轉發template<typename T> void PerfectForward(T&& t) {Fun(t); } int main() {PerfectForward(10); // 右值int a;PerfectForward(a); // 左值PerfectForward(std::move(a)); // 右值const int b = 8;PerfectForward(b); // const 左值PerfectForward(std::move(b)); // const 右值return 0; }

    運行結果:

    ? ? ? ? ? ?完美轉發會在傳參的過程中對象的原生類型屬性?


    新的類功能?

    ?原來C++的類中,有6個默認成員函數。C++11后新增兩個移動構造函數和移動賦值運算符重載。

    針對移動構造函數和移動賦值運算符重載有一些需要注意的點如下
    ?

    • 如果你沒有自己實現移動構造函數,且沒有實現析構函數 、拷貝構造、拷貝賦值重載中的任
      意一個。那么編譯器會自動生成一個默認移動構造。默認生成的移動構造函數,對于內置類
      型成員會執行逐成員按字節拷貝,自定義類型成員,則需要看這個成員是否實現移動構造,
      如果實現了就調用移動構造,沒有實現就調用拷貝構造。
      ?

    • 如果你沒有自己實現移動賦值重載函數,且沒有實現析構函數 、拷貝構造、拷貝賦值重載中
      的任意一個,那么編譯器會自動生成一個默認移動賦值。默認生成的移動構造函數,對于內
      置類型成員會執行逐成員按字節拷貝,自定義類型成員,則需要看這個成員是否實現移動賦
      值,如果實現了就調用移動賦值,沒有實現就調用拷貝賦值。(默認移動賦值跟上面移動構造
      完全類似)
      ?
    • 如果你提供了移動構造或者移動賦值,編譯器不會自動提供拷貝構造和拷貝賦值。這里要注意:一定要配套的全部實現不要單獨實現移動構造或者移動賦值

    強制生成的默認關鍵詞default:

    C++11為了讓你更好的控制函數,假設有一個你需要用到的默認成員函數,因為某一些原因沒有生成,那就可以用default來強制生成默認成員函數。比如:我們提供了拷貝構造就不會再生成移動構造了,可以加個default來強制它生成

    class Person { public:Person(const char* name = "", int age = 0):_name(name), _age(age){}Person(const Person& p):_name(p._name),_age(p._age){}Person(Person&& p) = default; private:bit::string _name;int _age; }; int main() {Person s1;Person s2 = s1;Person s3 = std::move(s1);return 0; }

    ?禁止生成默認成員函數的關鍵詞delete:

    如果能想要限制某些默認函數的生成,在C++98中,是該函數設置成private,并且只聲明補丁
    已,這樣只要其他人想要調用就會報錯。在C++11中更簡單,只需在該函數聲明加上=delete即
    可,該語法指示編譯器不生成對應函數的默認版本,稱=delete修飾的函數為刪除函數。

    class Person { public:Person(const char* name = "", int age = 0):_name(name), _age(age){} Person(const Person& p) = delete; private:bit::string _name;int _age; }; int main() {Person s1;Person s2 = s1;Person s3 = std::move(s1);return 0; }

    可變參數模板?

    template <class ...Args> void ShowList(Args... args) {}

    ?Args是一個模板參數包,args是一個函數形參參數包,聲明一個參數包Args...args,這個參數包可以包含0到任意個模板參數。

    上面的參數args前面有省略號,所以它就是一個可變模版參數,我們把帶省略號的參數稱為“參數包”,它里面包含了0到N(N>=0)個模版參數。我們無法直接獲取參數包args中的每個參數的,只能通過展開參數包的方式來獲取參數包中的每個參數,這是使用可變模版參數的一個主要特點,也是最大的難點,即如何展開可變模版參數。由于語法不支持使用args[i]這樣方式獲取可變參數,所以我們的用一些奇招來一一獲取參數包的值。

    用遞歸的方式展開參數包:

    // 遞歸終止函數 template <class T> void ShowList(const T& t) {cout << t << endl; } // 展開函數 template <class T, class ...Args> void ShowList(T value, Args... args) {cout << value <<" ";ShowList(args...); } int main() {ShowList(1);ShowList(1, 'A');ShowList(1, 'A', std::string("sort"));return 0; }

    逗號表達式展開參數包:

    這種展開參數包的方式,不需要通過遞歸終止函數,是直接在expand函數體中展開的, printarg
    不是一個遞歸終止函數,只是一個處理參數包中每一個參數的函數。

    這種就地展開參數包的方式實現的關鍵是逗號表達式。我們知道逗號表達式會按順序執行逗號前面的表達式。
    expand函數中的逗號表達式:(printarg(args), 0),也是按照這個執行順序,先執行printarg(args),再得到逗號表達式的結果0。同時還用到了C++11的另外一個特性——初始化列表,通過初始化列表來初始化一個變長數組,

    {(printarg(args), 0)...}將會展開成((printarg(arg1),0),(printarg(arg2),0), (printarg(arg3),0), etc... ),最終會創建一個元素值都為0的數組int arr[sizeof...(Args)]。由于是逗號表達式,在創建數組的過程中會先執行逗號表達式前面的部分printarg(args)打印出參數,也就是說在構造int數組的過程中就將參數包展開了,這個數組的目的純粹是為了在數組構造的過程展開參數包

    template <class T> void PrintArg(T t) {cout << t << " "; } //展開函數 template <class ...Args> void ShowList(Args... args) {int arr[] = { (PrintArg(args), 0)... };cout << endl; } int main() {ShowList(1);ShowList(1, 'A');ShowList(1, 'A', std::string("sort"));return 0; }


    ?

    STL中的emplace接口:

    emplace接口支持模板的可變參數,并且萬能引用。相對于insert他的優勢在哪里呢??

    int main() {std::list< std::pair<int, char> > mylist;// emplace_back支持可變參數,拿到構建pair對象的參數后自己去創建對象// 那么在這里我們可以看到除了用法上,和push_back沒什么太大的區別mylist.emplace_back(10, 'a');mylist.emplace_back(20, 'b');mylist.emplace_back(make_pair(30, 'c'));mylist.push_back(make_pair(40, 'd'));mylist.push_back({ 50, 'e' });for (auto e : mylist)cout << e.first << ":" << e.second << endl;return 0; }

    emplace_back支持可變參數,拿到pair對象的參數后自己去創建對象。和push_back沒有太大區別

    區別就是,emplace_back是直接構造對象出來在list中,push_back是先構造一個對象然后再移動構造,效率對于今天來說影響并不是很大。


    lambda表達式

    在C++98中想對一個數據進行排序,一般使用std::sort??

    int main() {int array[] = {3,1,2,4,6,8,5,9};// 默認是升序std::sort(array, array+sizeof(array)/sizeof(array[0]));默認是less<int>()// 如果需要降序,需要改變元素的比較規則std::sort(array, array + sizeof(array) / sizeof(array[0]), greater<int>());return 0; }

    而lambda表達式的?出現給程序員提供了很大的便攜;

    struct Goods {string _name; // 名字double _price; // 價格int _evaluate; // 評價 Goods(const char* str, double price, int evaluate):_name(str), _price(price), _evaluate(evaluate){} };int main() {vector<Goods> v = { { "蘋果", 2.1, 5 }, { "香蕉", 3, 4 }, { "橙子", 2.2,3 }, { "菠蘿", 1.5, 4 } };sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){return g1._price < g2._price; });sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){return g1._price > g2._price; });sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){return g1._evaluate < g2._evaluate; });sort(v.begin(), v.end(), [](const Goods& g1, const Goods& g2){return g1._evaluate > g2._evaluate; }); }

    看的出來其實lamda表達式就是一個匿名函數。

    lambda表達式語法:
    ?

    lambda表達式書寫格式:[capture-list] (parameters) mutable -> return-type { statement }


    [ capture_list ] :?捕捉列表,出現在lambda表達式開頭,編譯器根據[]來判斷接下來的代碼是否為lambda函數,捕捉列表能夠捕捉上下文中變量供lambda函數使用。?

    (parameters) :?參數列表。與普通函數的參數列表一致,如果不需要傳遞參數可以連()一起省了

    mutable :?默認情況下,lambda函數總是一個const函數,mutable可以取消他的常性。使用該修飾符時,參數列表不能省略(即使參數為空)?

    return -type :?返回值類型。用追蹤返回值類型形式聲明函數的返回值類型,沒有返回值可省略,有返回值也可以省略讓編譯器自動推導。

    {statement} :?函數體。在該函數體內,可以使用其參數外,還可以使用所有捕捉到的變量。

    注意:lambda函數定義中,參數列表和返回值類型都是可選部分,而捕捉列表可以為空。所以C++11中最簡單的lambda表達式為 []{}

    ?函數對象與lambda表達式:

    lass Rate { public:Rate(double rate): _rate(rate){}double operator()(double money, int year){ return money * _rate * year;} private:double _rate; }; int main() {// 函數對象double rate = 0.49;Rate r1(rate);r1(10000, 2);// lamberauto r2 = [=](double monty, int year)->double{return monty*rate*year;};r2(10000, 2);return 0; }

    從使用方式上看,函數對象與lambda表達式完全一樣

    實際在底層編譯器對于lambda表達式的處理方式,完全就是按照函數對象的方式處理的,如果定義了一個lambda表達式,編譯器會自動生成一個類,在該類中重載了operator()

    總結:

    ?C++11的更新的特性非常多,本篇博客講述了C++11中使用較多的新語法。

    1.{}更方便了類的初始化,使自定義類型的類更方便的初始化

    2.auto廢棄了原先的用法,取而代之的是自動類型推斷,并要求顯示的初始化,當定義類型的名字很長的時候就可以使用auto自動推斷,亦或者在使用范圍for的時候更為方便

    3.內存泄露的問題會導致程序的崩潰,新增的智能指針就可以在進程不正常結束的時候,能夠保證指針所指向的區域正常的釋放(free);智能指針本質就是定義了一個類,讓他具有指針的功能(因為類會自動調用析構函數)

    4.在SLT中新增了移動構造和移動拷貝,這就引入了左值和右值的概念,左值可以取他的地址,可以對他賦值,左值可以出現在賦值符號的左邊右值不能出現在賦值符號的左邊,比如一般的字面常量就是右值{1,'a',"str"}都算是右值。一般情況下左值的值都是有用的,而右值是可以被奪取的,在類的構造的時候會識別參數是左值還是右值,如果是左值就進行正常的構造,如果是右值就進行移動構造,移動構造就是用參數的資源來構建自己,有點成全他人犧牲自己,所以移動構造只是資源的轉移而不會新增資源。

    5.lambda表達式很大程度上方便了代碼的控制,就像sort函數時一般情況下是默認升序,而想讓sort后降序就需要傳遞一個仿函數過去,這樣就導致我們要特地去寫一個仿函數僅僅為了讓sort排降序,所以lambda表達式就是一個匿名函數可以在一定程度上代替掉仿函數。

    如果文章對你有幫助還請不要浪費你的點贊哦,謝謝支持


    ?

    總結

    以上是生活随笔為你收集整理的C++11 特性的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    亚洲日韩欧美一区二区在线 | 欧美日韩一区二区视频在线观看 | 欧美va天堂va视频va在线 | 欧美特一级 | 中国一级特黄毛片大片久久 | 国内成人精品视频 | 亚洲激情视频在线观看 | 日韩国产精品一区 | 草久在线播放 | 日韩女同av| 五月婷婷综 | 日日日操| 国内精品久久天天躁人人爽 | 亚洲欧美日韩在线看 | 99国产视频 | 97成人在线 | 婷婷久久综合网 | 国产精品日韩欧美一区二区 | 中文字幕免费播放 | www.色婷婷| 国产精品综合在线观看 | 激情婷婷色| 精品国产免费一区二区三区五区 | 久久在线免费观看 | 在线观看va | 亚洲成人999 | 久久久久久久综合色一本 | 国产精品久久久久免费a∨ 欧美一级性生活片 | 99国产在线观看 | 亚洲精品综合一二三区在线观看 | 欧美日韩一二三四区 | 精品亚洲午夜久久久久91 | 99久久99久久精品 | 国产精品久久久区三区天天噜 | 免费高清在线视频一区· | 国产精品资源在线 | 最新国产精品亚洲 | 黄色一级大片免费看 | 99视频免费看 | 91久久国产露脸精品国产闺蜜 | 亚洲国产精品视频 | 国产黄色片免费看 | 97超碰在线久草超碰在线观看 | 成年人免费电影 | 激情网五月天 | 中文区中文字幕免费看 | 一级片免费观看视频 | 色婷婷狠狠五月综合天色拍 | 亚洲黄色一级大片 | 亚洲国产影院av久久久久 | 日韩在线精品一区 | 欧美日韩中文字幕在线视频 | 国产精品黄 | 综合激情久久 | 久久久久久国产一区二区三区 | 国产日产高清dvd碟片 | 久久在视频 | 亚洲一区美女视频在线观看免费 | 丰满少妇麻豆av | 久久精品国亚洲 | www.91成人| 99色精品视频 | 成人免费观看视频网站 | 久久99久久精品国产 | 91亚洲精品久久久蜜桃 | 欧美一区二区日韩一区二区 | 亚洲乱码中文字幕综合 | 狠狠躁日日躁狂躁夜夜躁av | 日本黄网站 | 久久观看| 国产99久久久国产精品成人免费 | 亚洲精品黄色在线观看 | 久久高清片 | 国产欧美在线一区二区三区 | av三级在线播放 | 手机成人在线电影 | 国产日产精品久久久久快鸭 | 精品久久91 | 欧美日韩高清一区二区 国产亚洲免费看 | 精品婷婷 | av视屏在线| 天天操天天摸天天干 | 在线天堂中文www视软件 | 色天天综合网 | 亚洲午夜久久久久久久久电影网 | 精品国产免费一区二区三区五区 | 久久精品中文字幕一区二区三区 | 2000xxx影视 | 亚洲三级视频 | 在线va视频| 黄色小视频在线观看免费 | 日韩试看| 亚洲精品视频一二三 | 欧美午夜精品久久久久久浪潮 | 在线成人短视频 | 亚洲黄色免费在线 | 午夜久久久久久久 | 最近日韩中文字幕中文 | 国产精品美乳一区二区免费 | 欧美热久久 | 国产亚洲片 | 最近中文字幕高清字幕在线视频 | 97国产小视频 | 男女精品久久 | 丝袜+亚洲+另类+欧美+变态 | av网站在线免费观看 | 少妇做爰k8经典 | 超碰国产在线 | 349k.cc看片app| 在线观看mv的中文字幕网站 | 日韩理论在线观看 | 免费久久99精品国产婷婷六月 | 免费网址你懂的 | 国产精品久久久一区二区三区网站 | 97超碰人人澡人人 | 麻豆视频网址 | 亚洲精品中文字幕视频 | 成年人在线视频观看 | 久久 亚洲视频 | 黄色成人av网址 | 日韩剧 | 久久97超碰| 91av影视| 日本中文一级片 | 五月综合色 | 国产一级二级av | 日韩最新理论电影 | 日韩网 | 国产偷v国产偷∨精品视频 在线草 | 91精品免费看| 国产一二三精品 | 91网在线观看| www国产一区 | av网站免费线看精品 | 最新日本中文字幕 | www在线免费观看 | 成av在线 | 久久伊人精品一区二区三区 | 人人干天天射 | 日韩一区二区免费视频 | 国产精品久久一区二区三区不卡 | 天天操天天色天天射 | 高清美女视频 | 国产日韩精品一区二区三区在线 | 操碰av| 天天五月天色 | 一区二区三区免费在线观看视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 四虎在线永久免费观看 | 欧美精品久久久久久久久久久 | 狠狠狠狠干 | 丰满少妇久久久 | 五月婷婷黄色 | 日日夜夜婷婷 | 黄av在线| 香蕉在线视频观看 | 久久都是精品 | 欧美日韩二三区 | 国产日产欧美在线观看 | 欧美福利精品 | 国产日韩欧美在线免费观看 | 91丨九色丨丝袜 | 中文字幕a∨在线乱码免费看 | 国产精品18久久久久久久网站 | 色婷婷亚洲综合 | 九色porny真实丨国产18 | 国产精品免费久久久久久 | 日韩国产精品久久久久久亚洲 | 国产精品毛片一区视频播不卡 | 日日夜夜艹 | 日本乱码在线 | 精品国产99 | 免费观看性生交大片3 | 欧美日韩国产精品一区二区三区 | 伊人久久国产精品 | 色多多视频在线 | 久久97久久97精品免视看 | 国产精品毛片久久久久久久 | 欧洲亚洲激情 | 激情xxxx| 成人av手机在线 | 午夜性盈盈| 国产精品久久久久久a | 婷婷六月中文字幕 | 黄色网www| 日日夜夜天天 | 欧美精品一二三 | 亚洲成av | 天天操天天射天天舔 | 天天操夜夜操夜夜操 | 91中文在线视频 | 亚洲最新毛片 | 午夜91视频| 欧美另类美少妇69xxxx | av中文字幕第一页 | 国产视频中文字幕 | 在线观看精品一区 | 99福利影院 | 一区二区三区免费在线观看视频 | 在线观看免费视频你懂的 | 国产精品毛片一区二区在线看 | 91成人精品| 超碰国产在线 | 免费观看完整版无人区 | 亚洲美女视频在线观看 | 在线免费试看 | 亚洲激情在线播放 | 伊人亚洲精品 | 国产高清免费 | 亚洲激情在线观看 | 久久免费福利 | 久久在线观看 | 亚洲成av人片在线观看无 | 四虎伊人 | 久久精品国产亚洲 | 久草在线视频免赞 | 欧美不卡视频在线 | 国产一区欧美一区 | 亚洲视频每日更新 | 中文字幕免费在线 | 在线观看色网 | 国产成人久久精品一区二区三区 | 亚洲视频免费在线观看 | 国产精品成人一区二区三区吃奶 | 精品久久久久久国产91 | 国产精品成人免费一区久久羞羞 | 在线观看视频国产 | 激情电影影院 | 中文在线免费看视频 | 国产精品女人网站 | 91成人免费在线 | 国产精品欧美 | 一区二区三区www | 成人一区在线观看 | 国产小视频网站 | 久久99精品一区二区三区三区 | 久久综合之合合综合久久 | 久久精品视频网站 | 夜夜夜夜夜夜操 | 狠狠激情中文字幕 | 18国产精品白浆在线观看免费 | 黄色www| 国产精品成人免费 | 日韩久久久久久久久久 | 亚洲美女免费精品视频在线观看 | 狠狠撸电影 | 91成年视频 | av大片免费在线观看 | 久草五月| 国产精久久久久久妇女av | 国产原创中文在线 | 一区二区理论片 | 蜜桃av观看 | 亚洲激情在线观看 | 国产成人精品综合久久久久99 | 精品久久国产 | 免费色av | 婷婷激情在线观看 | 二区三区视频 | 欧美一级免费片 | 成人在线黄色电影 | 久久国产免费看 | 色婷婷激情四射 | 国产 在线观看 | 免费在线国产精品 | 二区三区av| 999精品在线| 综合久久久 | 久草精品视频 | 天天天天天天干 | 在线免费观看的av网站 | 免费视频区 | 欧美午夜一区二区福利视频 | 国产涩图| 中文字幕日韩免费视频 | 国产视频导航 | 五月激情亚洲 | 欧美高清视频不卡网 | 少妇高潮流白浆在线观看 | 玖草影院 | 日韩高清网站 | 91九色国产视频 | 久久手机精品视频 | 97色在线观看 | 黄色日视频 | 亚洲乱码久久久 | 97超碰免费 | 一区二区三区三区在线 | 激情在线网址 | 在线观看国产v片 | 日韩在线观看 | 久久99久久99精品免视看婷婷 | 国产网红在线 | 久久一区国产 | 国产精品一区二区av日韩在线 | 亚洲黄色片在线 | 91九色蝌蚪国产 | aa级黄色大片 | 欧美美女一级片 | 日韩中文字幕一区 | 中文字幕一区二区三区久久 | 久久久久久久久免费 | 国产一区二区在线视频观看 | 少妇搡bbbb搡bbb搡忠贞 | 免费看黄在线观看 | 国产一区二区高清视频 | 97日日碰人人模人人澡分享吧 | 波多野结衣精品 | 欧洲激情综合 | 国产精彩视频一区二区 | 色婷婷狠狠五月综合天色拍 | 亚洲一级二级 | 9热精品| 成年人黄色免费看 | 最近最新mv字幕免费观看 | 五月婷婷综合激情网 | 国产成人精品亚洲精品 | 黄色一级免费电影 | 欧美aa在线 | 91精品天码美女少妇 | 日本午夜在线亚洲.国产 | 最近高清中文字幕在线国语5 | 日韩动漫免费观看高清完整版在线观看 | 99久久爱| 色偷偷网站视频 | 久久好看免费视频 | 亚洲毛片在线观看. | 中文字幕在线观看完整版电影 | 日本久久成人中文字幕电影 | 婷婷在线视频观看 | 91av在线视频播放 | 日韩乱色精品一区二区 | 99精品久久只有精品 | 麻豆久久一区 | 日韩欧美高清免费 | 国产精品在线看 | 国产日韩精品在线观看 | 国产精品免费久久久久久 | 国产 日韩 欧美 中文 在线播放 | 欧美性生活久久 | www.人人草 | 午夜精品一区二区三区视频免费看 | 四季av综合网站 | 天天色天天干天天色 | 免费91麻豆精品国产自产在线观看 | av成人动漫| 天天干夜夜爽 | 在线av资源| 岛国一区在线 | 成人免费视频视频在线观看 免费 | 麻豆精品视频 | 精品国产免费人成在线观看 | 奇米影视8888在线观看大全免费 | 人人狠狠综合久久亚洲 | 日批网站在线观看 | 精品在线亚洲视频 | 欧美久久久久 | 色婷婷a | av在线播放不卡 | 欧美极品一区二区三区 | 国产中文字幕av | 中国美女一级看片 | 中文字幕成人 | 日韩69av| 九月婷婷人人澡人人添人人爽 | 中文字幕免 | av解说在线 | 精品v亚洲v欧美v高清v | 成人a大片 | 欧美日韩伦理在线 | 国产伦理精品一区二区 | 久久国产精品免费看 | 日韩欧美一区二区三区视频 | 人人艹视频 | 久久久久国产精品厨房 | 精品中文字幕在线播放 | 黄污网站在线 | 人人澡人人模 | 波多野结衣在线视频免费观看 | 婷婷网站天天婷婷网站 | 在线观看成人福利 | 成人一区二区在线 | 亚洲伊人婷婷 | 黄色av在 | 亚洲综合在线视频 | 国产一区二区在线免费视频 | 狠狠狠的干 | 精品国精品自拍自在线 | 国产在线精品二区 | 久草在线中文视频 | 国产麻豆电影在线观看 | 国产99免费视频 | 欧美日韩在线视频免费 | 国产精品毛片一区视频播不卡 | www.色com| 欧美性生活免费 | 亚洲高清视频在线观看 | 狠狠色丁香婷婷综合最新地址 | 91男人影院| 久久久久久国产一区二区三区 | av在线免费播放网站 | 国产精品剧情在线亚洲 | 国产日韩在线播放 | 激情校园亚洲 | 精品久久久久久综合日本 | 97av视频| 一级黄色片在线免费看 | 国产精品一区二区在线看 | 日韩精品免费在线播放 | av中文字幕网 | 在线观看国产日韩 | 国产专区日韩专区 | 欧洲精品码一区二区三区免费看 | 一区二区三区在线免费 | 午夜精品久久久久久久爽 | 粉嫩av一区二区三区四区在线观看 | 又黄又色又爽 | 超碰人人做 | 中文字幕日韩免费视频 | 99电影 | 国产一级免费播放 | 国产精品18久久久久久久网站 | 日韩电影在线观看中文字幕 | 久久久久色 | av一级久久 | 91免费高清在线观看 | 伊人久久国产精品 | 国产精品不卡视频 | 国产福利在线不卡 | 亚洲精品在线视频播放 | 亚洲狠狠婷婷 | 色狠狠久久av五月综合 | 天堂av在线网址 | 啪啪av在线 | 成人黄性视频 | 九九热99视频 | 日韩在线视频线视频免费网站 | 美女网站在线免费观看 | 久久精品99久久久久久 | 国内亚洲精品 | 中文字幕一区二区三区在线播放 | 天天色天天上天天操 | 精品影院 | 欧美天堂视频在线 | 精品国偷自产在线 | 一区二区精 | 精品国产乱码久久 | 96精品视频 | 在线观看视频国产一区 | 日p在线观看 | 高清一区二区三区av | 久久在线视频精品 | 欧美日韩国产一区二 | 丁香久久综合 | 日韩在线观看小视频 | 成人影片在线免费观看 | 日韩欧美电影在线 | 免费看片网页 | 在线观看中文字幕网站 | 伊人亚洲精品 | 福利视频精品 | 欧美人体xx | 免费高清av在线看 | 日韩精品久久久久久中文字幕8 | 天天操夜夜看 | 久久线视频 | 国产一级在线观看 | 欧美成人视 | 免费av小说 | 久久综合狠狠 | 国产网站在线免费观看 | 在线精品在线 | 久草在线免 | 91免费观看视频网站 | 婷婷综合久久 | 99这里精品 | 国产精品视频全国免费观看 | 久久免费观看少妇a级毛片 久久久久成人免费 | 国产婷婷 | 男女男视频| 色在线网 | 亚洲国产网址 | 成人av播放 | 久久久久久电影 | 亚洲欧洲成人精品av97 | 天天爱天天射天天干天天 | 婷婷丁香狠狠爱 | 九九热在线精品 | 亚洲精品高清在线观看 | 亚洲精品网址在线观看 | 久久久久久久久久久影视 | 日韩网站在线观看 | 高清av影院 | 久久国产精品一区二区三区四区 | 日韩欧美视频二区 | 欧美一级网站 | 国产午夜一区 | bayu135国产精品视频 | 国产香蕉视频在线观看 | 免费av观看网站 | 中文免费在线观看 | 色久网| 91人人爱 | 精品国产综合区久久久久久 | 五月天综合激情网 | 欧美老女人xx | 99久久网站 | 国产精品美女久久久久久久久久久 | 最近的中文字幕大全免费版 | 久久精品男人的天堂 | 精品一二三四在线 | 国产成人精品久久久久 | 久草在线视频在线观看 | 国产91精品看黄网站 | av千婊在线免费观看 | 婷婷av色综合 | 青草视频网 | 美女视频国产 | 国产理论一区二区三区 | 天天视频色版 | 日韩视频一区二区三区在线播放免费观看 | 91亚洲精品久久久蜜桃 | 在线日韩一区 | 九九综合在线 | 亚洲免费精品视频 | 亚洲传媒在线 | 色在线免费视频 | 久久免费国产视频 | 国产精品成久久久久三级 | 亚洲精品9| 草草草影院 | 2023国产精品自产拍在线观看 | 日韩美一区二区三区 | 99精品国产高清在线观看 | 国产精品一区二区 91 | 久草观看 | 婷婷色视频 | 精品亚洲一区二区 | 亚洲精品中文字幕在线观看 | 欧美国产91 | 在线www色 | 久久久亚洲麻豆日韩精品一区三区 | 久久这里只有精品视频99 | av视屏在线播放 | 狠狠色丁香久久婷婷综合五月 | 亚洲综合成人专区片 | 五月婷婷综合在线视频 | 日本精品久久久久影院 | 久一久久 | 欧美日韩一级在线 | 黄色国产在线观看 | 国产一区二区观看 | 在线免费黄 | 亚洲成人av一区二区 | 全黄网站| 亚洲精品黄 | 国产又粗又猛又色又黄网站 | 久久国产精品一区二区 | 亚州日韩中文字幕 | 最新午夜电影 | 日韩免费区 | 国产黄色特级片 | 亚洲三级黄 | 超碰在线观看av | 久久综合免费视频影院 | 亚洲免费观看在线视频 | 91在线影院 | 亚洲成av人片在线观看无 | 久久久国产一区二区三区四区小说 | 国产精成人品免费观看 | 日韩精品一区二区三区中文字幕 | 久久夜视频 | 99热精品久久 | 日韩羞羞 | 网站免费黄 | 国产最新视频在线 | 亚洲激情在线播放 | 91av视频| 奇米影视777影音先锋 | 国产精品毛片一区二区三区 | 国产女人免费看a级丨片 | 亚洲国产精品视频 | 在线观看视频一区二区三区 | 日韩精品大片 | 免费看一级 | 国产在线观看免费 | 91视频免费观看 | 天天综合狠狠精品 | 亚洲一区二区天堂 | 最新国产精品久久精品 | 色婷婷久久一区二区 | 黄污网站在线 | 天天干人人 | 色吧久久 | 久99久在线视频 | 97人人射 | 成人午夜剧场在线观看 | 日韩视频中文字幕 | 中文字幕成人一区 | 成人18视频 | 深爱五月激情网 | 五月婷婷在线观看视频 | 国产福利中文字幕 | 久久激情电影 | 精品国产91亚洲一区二区三区www | 在线影院中文字幕 | 伊人激情网 | 国产精品一区二区久久久 | avsex| 在线观看免费高清视频大全追剧 | 久草电影免费在线观看 | 欧美国产高清 | 日本激情中文字幕 | 久久久久久久久久久免费av | 成人网看片 | 国产成人久久精品77777综合 | 午夜电影中文字幕 | 草樱av| 99视频国产在线 | 日本女人的性生活视频 | 日本性生活一级片 | av 一区二区三区四区 | 国内三级在线观看 | 久久艹欧美| www.色综合.com | 黄色av电影一级片 | 欧美日韩精品免费观看 | av网站播放 | 久久天天拍 | 免费av一级电影 | 日日夜夜天天综合 | 毛片精品免费在线观看 | 亚洲国产精品va在线看 | 午夜国产福利视频 | 超碰97网站| 天天综合网久久 | 亚洲激情电影在线 | 欧美日韩一区二区在线观看 | 久久五月婷婷丁香 | 日本特黄特色aaa大片免费 | 色噜噜在线观看视频 | 美女免费视频一区 | 久操伊人 | 91亚洲夫妻| 国内久久 | 综合五月| 怡春院av | 日韩高清片 | 日本高清免费中文字幕 | 亚洲国产精品一区二区久久hs | 日韩一区二区三区不卡 | 亚洲性xxxx | 另类老妇性bbwbbw高清 | 天天操,夜夜操 | 久草电影免费在线观看 | 国产日韩精品一区二区 | 色综合久久88色综合天天人守婷 | 国产成人亚洲在线观看 | 国产尤物在线 | 中文字幕在线播放日韩 | 天天操月月操 | 欧美黑人猛交 | 天天综合五月天 | 久久爱导航 | 日本最新一区二区三区 | 国产 字幕 制服 中文 在线 | 337p西西人体大胆瓣开下部 | 美女久久99 | 国产高清视频免费观看 | 午夜精品久久久久久久99水蜜桃 | 国产精品免费久久久久久久久久中文 | 五月婷婷综合在线 | 人人讲 | 99精品免费在线观看 | 毛片精品免费在线观看 | 丁香九月婷婷 | 狠狠操91 | 91在线看片 | 视频在线观看入口黄最新永久免费国产 | 色综合亚洲精品激情狠狠 | 久久黄色小说视频 | 国产91免费观看 | 亚洲激情 欧美激情 | 91精品一区国产高清在线gif | 国产日韩精品一区二区三区在线 | 成人中文字幕在线 | 国产黄色精品网站 | 伊人电影天堂 | 最新中文字幕在线播放 | 99综合电影在线视频 | 国产色拍拍拍拍在线精品 | 手机av网站| 免费网站v | 亚洲国产成人久久综合 | 国产黄色在线 | 亚洲丝袜一区二区 | 国产小视频免费观看 | 亚洲成人av在线 | 欧美极品xxx | 91精品在线视频观看 | 国产成人av一区二区三区在线观看 | 一本一道久久a久久精品 | 黄色亚洲 | www色网站 | 免费av高清 | 国产五月色婷婷六月丁香视频 | 免费久久网站 | 色综合天天综合 | 激情图片qvod | 波多野结衣在线观看一区 | 日韩.com | 久久久资源网 | 免费网站在线观看人 | 国产精品国产三级国产不产一地 | 97手机电影网 | 激情深爱五月 | 91精品久久久久久久久 | 97成人精品视频在线观看 | www.五月婷婷| 手机在线观看国产精品 | 最新精品视频在线 | 日韩精品一区在线观看 | www色com| 亚洲国产中文字幕在线观看 | 精品国产一区二区三区四 | 91精品欧美一区二区三区 | 天天干天天射天天插 | 麻豆精品传媒视频 | 98精品国产自产在线观看 | 精品国产精品国产偷麻豆 | 国产精选在线观看 | 成人h在线播放 | 黄色大片网 | 亚洲电影第一页av | 丁香 久久 综合 | 中文字幕av全部资源www中文字幕在线观看 | 日韩在线中文字幕视频 | 在线a亚洲视频播放在线观看 | 国产v在线 | 在线观看免费一级片 | 波多野结衣亚洲一区二区 | 国产精品一区免费在线观看 | 91一区啪爱嗯打偷拍欧美 | 精品国产乱码一区二 | 亚洲国产精品资源 | 日韩av有码在线 | 亚洲国产精品成人va在线观看 | 在线播放 亚洲 | 久久情侣偷拍 | 最近最新mv字幕免费观看 | 夜夜夜| 亚洲在线视频免费 | 97免费 | 特片网久久| 国产福利91精品张津瑜 | 亚洲精品美女在线观看 | 超碰免费av | 蜜桃av久久久亚洲精品 | 在线观看日韩精品 | 久久精品国产精品亚洲精品 | 黄色网www | 日本久久免费电影 | 亚洲国产婷婷 | 久久国产精品久久精品国产演员表 | 黄色精品在线看 | 中文字幕专区高清在线观看 | 国产精品乱码久久久久久1区2区 | 午夜久久久精品 | 日韩三级精品 | 99婷婷狠狠成为人免费视频 | 超碰人人草| 香蕉视频网站在线观看 | 日韩资源在线观看 | 5月丁香婷婷综合 | 精品国产乱码久久久久久三级人 | 亚洲理论影院 | 91精品啪啪| 就要干b| 天天插视频| 美女久久视频 | 午夜精品一区二区三区可下载 | 特级毛片网站 | 国产国产人免费人成免费视频 | 在线导航av | 色综合天天天天做夜夜夜夜做 | 97视频在线观看免费 | 亚洲国产中文字幕在线观看 | 超碰97免费在线 | 久草在线观看视频免费 | 国产三级av在线 | 国产伦精品一区二区三区免费 | 美女网站视频免费黄 | 毛片区| 国产成人av | 97超视频在线观看 | 久久久在线视频 | 国产韩国精品一区二区三区 | 久久久国产在线视频 | 色综合色综合久久综合频道88 | 麻豆视频观看 | 午夜999 | 黄色av网站在线观看免费 | 国产精品一级视频 | 九九久久精品 | 天天干天天碰 | 久久综合国产伦精品免费 | 丁香激情综合久久伊人久久 | 国产黄色电影 | 亚洲欧美精品一区二区 | 毛片区 | 麻花传媒mv免费观看 | 在线不卡的av | 久久黄色片子 | 69视频网站 | 免费人成网| 天天射天天干天天 | 一区二区三区在线免费播放 | 亚洲国产成人精品在线 | 精品国产美女在线 | 国产美女视频免费观看的网站 | 韩国中文三级 | 在线影院av| 探花视频在线版播放免费观看 | 不卡的av在线播放 | 国产一级视屏 | 欧美午夜久久 | 深爱开心激情网 | 亚洲 中文 在线 精品 | 91在线看视频免费 | 天天射成人| 久久激情视频 久久 | 欧美特一级片 | 久久综合成人网 | 国产色在线 | 99 精品 在线| 四虎在线免费视频 | 国产精品久久久久永久免费看 | 欧美激情视频一二三区 | 久久视精品 | 婷婷伊人五月 | 国产精品99久久久久久小说 | 免费能看的黄色片 | 久久99国产综合精品 | 丁香婷婷深情五月亚洲 | 狠狠躁夜夜躁人人爽视频 | 免费看黄电影 | 99这里只有精品视频 | 久久国产影视 | 99在线国产 | 99久久婷婷国产精品综合 | 一区二区 精品 | 888av| 99久久99久久精品国产片果冰 | 欧美日韩首页 | 粉嫩一二三区 | 久久精品一级片 | 玖玖精品在线 | 久久视频国产 | 一区二区三区电影在线播 | 欧美精品首页 | 精品美女在线视频 | 91精品国产欧美一区二区 | 成人h电影在线观看 | 国内精品久久久久影院优 | a黄色影院 | 久久久久综合精品福利啪啪 | 久久久久久久99精品免费观看 | 欧美性黑人 | 乱男乱女www7788 | av黄免费看| 粉嫩av一区二区三区四区五区 | 国产不卡免费av | 五月天最新网址 | 天天操夜夜摸 | www五月天| 91色偷偷 | www.日本色 | 丁香六月在线 | 国产成人久久精品一区二区三区 | 99久久婷婷国产一区二区三区 | 国产精品欧美一区二区三区不卡 | 91在线永久 | 中文av一区二区 | 9999精品免费视频 | 深爱开心激情网 | 国产精品一区二区三区在线播放 | 国产免费观看久久 | 蜜臀精品久久久久久蜜臀 | 最新成人av| 午夜国产福利在线 | 中文字幕在线播放一区 | 江苏妇搡bbbb搡bbbb | 人人看看人人 | 天天干天天色2020 | av888av.com| 丁香婷婷电影 | 91传媒免费在线观看 | 国产亚洲视频中文字幕视频 | 亚洲日本va在线观看 | 日本乱视频 | 911国产| 欧美午夜性生活 | 香蕉97视频观看在线观看 | 婷婷草| 免费网站在线 | 中文字幕精品三级久久久 | 久久视频在线观看中文字幕 | 天天射综合 | www.夜夜操 | 欧美91精品久久久久国产性生爱 | 欧美激情视频一区 | 欧美日韩网站 | www久草 | 免费看的av片 | 精品视频不卡 | 久久久久免费网 | 天天曰天天射 | 91成人精品一区在线播放69 | 久久激情视频 久久 | 国产69熟| 久久久久久久久久久久久久av | 成人在线观看免费视频 | 久久综合综合久久综合 | 亚洲精品乱码久久久久久9色 | 福利视频第一页 | 精品国产伦一区二区三区 | 成人a大片| 男女激情麻豆 | 日韩精品一区二区三区水蜜桃 | 亚洲日本va午夜在线影院 | 日韩免费一区二区在线观看 | 国产成人一二三 | 精品无人国产偷自产在线 | 欧洲成人av | 免费在线一区二区 | 日韩免费一级a毛片在线播放一级 | www.夜夜爱 | 国产精品毛片一区视频播不卡 | 亚洲影院天堂 | 国内久久精品视频 | 91资源在线视频 | 久久天堂亚洲 | 国产精品毛片久久久久久久 | 正在播放国产一区二区 | 久99久精品视频免费观看 | 日批网站在线观看 | 天堂在线免费视频 | 久久久久久久久福利 | 婷婷色在线观看 | 最近2019年日本中文免费字幕 | 天天狠狠干 | 日韩xxxbbb | 国产精品日韩欧美一区二区 | 婷久久 | 国产精品麻豆三级一区视频 | 国产精品免费视频一区二区 | 人人舔人人干 | 亚洲情婷婷 | 亚洲国产操 | 亚洲成人资源在线 | 欧美日韩69 | 天天色天天操天天爽 | 狠狠地操 | 黄色一级大片在线免费看产 | 成人av一区二区兰花在线播放 | 三级毛片视频 | 综合激情av | 久久黄色免费视频 | 日日夜夜添 | 五月开心六月伊人色婷婷 | 欧美日韩视频 | 久久九九精品久久 | 国产免费激情久久 | 国产高清免费视频 | 日本高清免费中文字幕 | 337p日本大胆噜噜噜噜 | 精品国内自产拍在线观看视频 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 精品成人国产 | 久久精品网 | 91插插视频 | 色资源二区在线视频 | 99视频这里有精品 | 欧美日一级片 | 久久国产精品一区二区三区 | 超碰在线观看av | 最新日韩视频在线观看 | 字幕网av| 国产91精品久久久久久 | 亚洲天堂网在线观看视频 | 亚洲a成人v | 中文字幕在线观看视频一区 | 成人在线视频论坛 | 国产精品video爽爽爽爽 | 国产日韩精品在线观看 | 久久久久久久久久久电影 | 精品在线视频播放 | 色姑娘综合天天 |