精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

他來了,他來了,C++17新特性精華都在這了

開發 后端
今天向親愛的讀者們介紹下C++17的新特性,現在基本上各個編譯器對C++17都已經提供完備的支持,建議大家編程中嘗試使用下C++17,可以一定程度上簡化代碼編寫,提高編程效率。

[[334546]]

本文轉載自微信公眾號「程序喵大人」,作者程序喵大人 。轉載本文請聯系程序喵大人公眾號。

程序喵之前已經介紹過C++11的新特性和C++14的新特性(點擊對應文字,直接訪問),今天向親愛的讀者們介紹下C++17的新特性,現在基本上各個編譯器對C++17都已經提供完備的支持,建議大家編程中嘗試使用下C++17,可以一定程度上簡化代碼編寫,提高編程效率。

主要新特性如下:

 

  • 構造函數模板推導
  • 結構化綁定
  • if-switch語句初始化
  • 內聯變量
  • 折疊表達式
  • constexpr lambda表達式
  • namespace嵌套
  • __has_include預處理表達式
  • 在lambda表達式用*this捕獲對象副本
  • 新增Attribute
  • 字符串轉換
  • std::variant
  • std::optional
  • std::any
  • std::apply
  • std::make_from_tuple
  • as_const
  • std::string_view
  • file_system
  • std::shared_mutex

下面,程序喵一一介紹:

構造函數模板推導

在C++17前構造一個模板類對象需要指明類型:

  1. pair<intdouble> p(1, 2.2); // before c++17 

C++17就不需要特殊指定,直接可以推導出類型,代碼如下:

  1. pair p(1, 2.2); // c++17 自動推導 
  2. vector v = {1, 2, 3}; // c++17 

結構化綁定

通過結構化綁定,對于tuple、map等類型,獲取相應值會方便很多,看代碼:

  1. std::tuple<intdouble> func() { 
  2.    return std::tuple(1, 2.2); 
  3.  
  4. int main() { 
  5.    auto[i, d] = func(); //是C++11的tie嗎?更高級 
  6.    cout << i << endl; 
  7.    cout << d << endl; 
  8.  
  9. //========================== 
  10. void f() { 
  11.    map<int, string> m = { 
  12.     {0, "a"}, 
  13.     {1, "b"},   
  14.   }; 
  15.    for (const auto &[i, s] : m) { 
  16.        cout << i << " " << s << endl; 
  17.   } 
  18.  
  19. // ==================== 
  20. int main() { 
  21.    std::pair a(1, 2.3f); 
  22.    auto[i, f] = a; 
  23.    cout << i << endl; // 1 
  24.    cout << f << endl; // 2.3f 
  25.    return 0; 

結構化綁定還可以改變對象的值,使用引用即可:

  1. // 進化,可以通過結構化綁定改變對象的值 
  2. int main() { 
  3.    std::pair a(1, 2.3f); 
  4.    auto& [i, f] = a; 
  5.    i = 2; 
  6.    cout << a.first << endl; // 2 

注意結構化綁定不能應用于constexpr

  1. constexpr auto[x, y] = std::pair(1, 2.3f); // compile error, C++20可以 

結構化綁定不止可以綁定pair和tuple,還可以綁定數組和結構體等。

  1. int array[3] = {1, 2, 3}; 
  2. auto [a, b, c] = array; 
  3. cout << a << " " << b << " " << c << endl; 
  4.  
  5. // 注意這里的struct的成員一定要是public的 
  6. struct Point { 
  7.    int x; 
  8.    int y; 
  9. }; 
  10. Point func() { 
  11.    return {1, 2}; 
  12. const auto [x, y] = func(); 

這里其實可以實現自定義類的結構化綁定,代碼如下:

  1. // 需要實現相關的tuple_size和tuple_element和get<N>方法。 
  2. class Entry { 
  3. public
  4.    void Init() { 
  5.        name_ = "name"
  6.        age_ = 10; 
  7.   } 
  8.  
  9.    std::string GetName() const { return name_; } 
  10.    int GetAge() const { return age_; } 
  11. private: 
  12.    std::string name_; 
  13.    int age_; 
  14. }; 
  15.  
  16. template <size_t I> 
  17. auto get(const Entry& e) { 
  18.    if constexpr (I == 0) return e.GetName(); 
  19.    else if constexpr (I == 1) return e.GetAge(); 
  20.  
  21. namespace std { 
  22.    template<> struct tuple_size<Entry> : integral_constant<size_t, 2> {}; 
  23.    template<> struct tuple_element<0, Entry> { using type = std::string; }; 
  24.    template<> struct tuple_element<1, Entry> { using type = int; }; 
  25.  
  26. int main() { 
  27.    Entry e; 
  28.    e.Init(); 
  29.    auto [name, age] = e; 
  30.    cout << name << " " << age << endl; // name 10 
  31.    return 0; 

if-switch語句初始化

C++17前if語句需要這樣寫代碼:

  1. int a = GetValue(); 
  2. if (a < 101) { 
  3.    cout << a; 

C++17之后可以這樣:

  1. // if (init; condition) 
  2.  
  3. if (int a = GetValue()); a < 101) { 
  4.    cout << a; 
  5.  
  6. string str = "Hi World"
  7. if (auto [pos, size] = pair(str.find("Hi"), str.size()); pos != string::npos) { 
  8.    std::cout << pos << " Hello, size is " << size

使用這種方式可以盡可能約束作用域,讓代碼更簡潔,但是可讀性略有下降。

內聯變量

C++17前只有內聯函數,現在有了內聯變量,我們印象中C++類的靜態成員變量在頭文件中是不能初始化的,但是有了內聯變量,就可以達到此目的:

  1. // header file 
  2. struct A { 
  3.    static const int value;   
  4. }; 
  5. inline int const A::value = 10; 
  6.  
  7. // ==========或者======== 
  8. struct A { 
  9.    inline static const int value = 10; 

折疊表達式

C++17引入了折疊表達式使可變參數模板編程更方便:

  1. template <typename ... Ts> 
  2. auto sum(Ts ... ts) { 
  3.    return (ts + ...); 
  4. int a {sum(1, 2, 3, 4, 5)}; // 15 
  5. std::string a{"hello "}; 
  6. std::string b{"world"}; 
  7. cout << sum(a, b) << endl; // hello world 

constexpr lambda表達式

C++17前lambda表達式只能在運行時使用,C++17引入了constexpr lambda表達式,可以用于在編譯期進行計算。

  1. int main() { // c++17可編譯 
  2.    constexpr auto lamb = [] (int n) { return n * n; }; 
  3.    static_assert(lamb(3) == 9, "a"); 

注意

constexpr函數有如下限制:

函數體不能包含匯編語句、goto語句、label、try塊、靜態變量、線程局部存儲、沒有初始化的普通變量,不能動態分配內存,不能有new delete等,不能虛函數。

namespace嵌套

  1. namespace A { 
  2.    namespace B { 
  3.        namespace C { 
  4.            void func(); 
  5.       } 
  6.   } 
  7.  
  8. // c++17,更方便更舒適 
  9. namespace A::B::C { 
  10.    void func();) 

__has_include預處理表達式

可以判斷是否有某個頭文件,代碼可能會在不同編譯器下工作,不同編譯器的可用頭文件有可能不同,所以可以使用此來判斷:

  1. #if defined __has_include 
  2. #if __has_include(<charconv>) 
  3. #define has_charconv 1 
  4. #include <charconv> 
  5. #endif 
  6. #endif 
  7.  
  8. std::optional<int> ConvertToInt(const std::string& str) { 
  9.    int value{}; 
  10. #ifdef has_charconv 
  11.    const auto last = str.data() + str.size(); 
  12.    const auto res = std::from_chars(str.data(), last, value); 
  13.    if (res.ec == std::errc{} && res.ptr == lastreturn value; 
  14. #else 
  15.    // alternative implementation... 
  16.    其它方式實現 
  17. #endif 
  18.    return std::nullopt; 

在lambda表達式用*this捕獲對象副本

正常情況下,lambda表達式中訪問類的對象成員變量需要捕獲this,但是這里捕獲的是this指針,指向的是對象的引用,正常情況下可能沒問題,但是如果多線程情況下,函數的作用域超過了對象的作用域,對象已經被析構了,還訪問了成員變量,就會有問題。

  1. struct A { 
  2.    int a; 
  3.    void func() { 
  4.        auto f = [this] { 
  5.            cout << a << endl; 
  6.       }; 
  7.        f(); 
  8.   }   
  9. }; 
  10. int main() { 
  11.    A a; 
  12.    a.func(); 
  13.    return 0; 

所以C++17增加了新特性,捕獲*this,不持有this指針,而是持有對象的拷貝,這樣生命周期就與對象的生命周期不相關啦。

  1. struct A { 
  2.    int a; 
  3.    void func() { 
  4.        auto f = [*this] { // 這里 
  5.            cout << a << endl; 
  6.       }; 
  7.        f(); 
  8.   }   
  9. }; 
  10. int main() { 
  11.    A a; 
  12.    a.func(); 
  13.    return 0; 

新增Attribute

我們可能平時在項目中見過__declspec__, __attribute__ , #pragma指示符,使用它們來給編譯器提供一些額外的信息,來產生一些優化或特定的代碼,也可以給其它開發者一些提示信息。

例如:

  1. struct A { short f[3]; } __attribute__((aligned(8))); 
  2.  
  3. void fatal() __attribute__((noreturn)); 

在C++11和C++14中有更方便的方法:

  1. [[carries_dependency]] 讓編譯期跳過不必要的內存柵欄指令 
  2. [[noreturn]] 函數不會返回 
  3. [[deprecated]] 函數將棄用的警告 
  4.  
  5. [[noreturn]] void terminate() noexcept; 
  6. [[deprecated("use new func instead")]] void func() {} 

C++17又新增了三個:

[[fallthrough]]:用在switch中提示可以直接落下去,不需要break,讓編譯期忽略警告

  1. switch (i) {} 
  2.     case 1: 
  3.         xxx; // warning 
  4.     case 2: 
  5.         xxx; 
  6.         [[fallthrough]];      // 警告消除 
  7.     case 3: 
  8.         xxx; 
  9.        break; 

使得編譯器和其它開發者都可以理解開發者的意圖。

[[nodiscard]] :表示修飾的內容不能被忽略,可用于修飾函數,標明返回值一定要被處理

  1. [[nodiscard]] int func(); 
  2. void F() { 
  3.     func(); // warning 沒有處理函數返回值 

[[maybe_unused]] :提示編譯器修飾的內容可能暫時沒有使用,避免產生警告

  1. void func1() {} 
  2. [[maybe_unused]] void func2() {} // 警告消除 
  3. void func3() { 
  4.     int x = 1; 
  5.     [[maybe_unused]] int y = 2; // 警告消除 

字符串轉換

新增from_chars函數和to_chars函數,直接看代碼:

  1. #include <charconv> 
  2.  
  3. int main() { 
  4.     const std::string str{"123456098"}; 
  5.     int value = 0; 
  6.     const auto res = std::from_chars(str.data(), str.data() + 4, value); 
  7.     if (res.ec == std::errc()) { 
  8.         cout << value << ", distance " << res.ptr - str.data() << endl; 
  9.     } else if (res.ec == std::errc::invalid_argument) { 
  10.         cout << "invalid" << endl; 
  11.     } 
  12.     str = std::string("12.34); 
  13.     double val = 0; 
  14.     const auto format = std::chars_format::general; 
  15.     res = std::from_chars(str.data(), str.data() + str.size(), value, format); 
  16.  
  17.     str = std::string("xxxxxxxx"); 
  18.     const int v = 1234; 
  19.     res = std::to_chars(str.data(), str.data() + str.size(), v); 
  20.     cout << str << ", filled " << res.ptr - str.data() << " characters \n"
  21.     // 1234xxxx, filled 4 characters 

注意

一般情況下variant的第一個類型一般要有對應的構造函數,否則編譯失敗:

  1. struct A { 
  2.     A(int i){} 
  3. }; 
  4. int main() { 
  5.     std::variant<A, int> var; // 編譯失敗 

如何避免這種情況呢,可以使用std::monostate來打個樁,模擬一個空狀態。

  1. std::variant<std::monostate, A> var; // 可以編譯成功 

std::optional

我們有時候可能會有需求,讓函數返回一個對象,如下:

  1. struct A {}; 
  2. A func() { 
  3.     if (flag) return A(); 
  4.     else { 
  5.         // 異常情況下,怎么返回異常值呢,想返回個空呢 
  6.     } 

有一種辦法是返回對象指針,異常情況下就可以返回nullptr啦,但是這就涉及到了內存管理,也許你會使用智能指針,但這里其實有更方便的辦法就是std::optional。

  1. std::optional<int> StoI(const std::string &s) { 
  2.     try { 
  3.         return std::stoi(s); 
  4.     } catch(...) { 
  5.         return std::nullopt; 
  6.     } 
  7.  
  8. void func() { 
  9.     std::string s{"123"}; 
  10.     std::optional<int> o = StoI(s); 
  11.     if (o) { 
  12.         cout << *o << endl; 
  13.     } else { 
  14.         cout << "error" << endl; 
  15.     } 

std::any

C++17引入了any可以存儲任何類型的單個值,見代碼:

  1. int main() { // c++17可編譯 
  2.     std::any a = 1; 
  3.     cout << a.type().name() << " " << std::any_cast<int>(a) << endl; 
  4.     a = 2.2f; 
  5.     cout << a.type().name() << " " << std::any_cast<float>(a) << endl; 
  6.     if (a.has_value()) { 
  7.         cout << a.type().name(); 
  8.     } 
  9.     a.reset(); 
  10.     if (a.has_value()) { 
  11.         cout << a.type().name(); 
  12.     } 
  13.     a = std::string("a"); 
  14.     cout << a.type().name() << " " << std::any_cast<std::string>(a) << endl; 
  15.     return 0; 

std::apply

使用std::apply可以將tuple展開作為函數的參數傳入,見代碼:

  1. int add(int firstint second) { return first + second; } 
  2.  
  3. auto add_lambda = [](auto first, auto second) { return first + second; }; 
  4.  
  5. int main() { 
  6.     std::cout << std::apply(add, std::pair(1, 2)) << '\n'
  7.     std::cout << add(std::pair(1, 2)) << "\n"; // error 
  8.     std::cout << std::apply(add_lambda, std::tuple(2.0f, 3.0f)) << '\n'

std::make_from_tuple

使用make_from_tuple可以將tuple展開作為構造函數參數

  1. struct Foo { 
  2.     Foo(int firstfloat secondint third) { 
  3.         std::cout << first << ", " << second << ", " << third << "\n"
  4.     } 
  5. }; 
  6. int main() { 
  7.    auto tuple = std::make_tuple(42, 3.14f, 0); 
  8.    std::make_from_tuple<Foo>(std::move(tuple)); 

std::string_view

通常我們傳遞一個string時會觸發對象的拷貝操作,大字符串的拷貝賦值操作會觸發堆內存分配,很影響運行效率,有了string_view就可以避免拷貝操作,平時傳遞過程中傳遞string_view即可。

  1. void func(std::string_view stv) { cout << stv << endl; } 
  2.  
  3. int main(void) { 
  4.     std::string str = "Hello World"
  5.     std::cout << str << std::endl; 
  6.  
  7.     std::string_view stv(str.c_str(), str.size()); 
  8.     cout << stv << endl; 
  9.     func(stv); 
  10.     return 0; 

as_const

C++17使用as_const可以將左值轉成const類型

  1. std::string str = "str"
  2. const std::string& constStr = std::as_const(str); 

file_system

C++17正式將file_system納入標準中,提供了關于文件的大多數功能,基本上應有盡有,這里簡單舉幾個例子:

  1. namespace fs = std::filesystem; 
  2. fs::create_directory(dir_path); 
  3. fs::copy_file(src, dst, fs::copy_options::skip_existing); 
  4. fs::exists(filename); 
  5. fs::current_path(err_code); 

std::shared_mutex

C++17引入了shared_mutex,可以實現讀寫鎖,具體可以見我上一篇文章:C++14新特性的所有知識點全在這兒啦!

關于C++17的介紹就到這里,希望對大家有所幫助~

參考資料

https://en.cppreference.com/w/cpp/utility/make_from_tuple

https://en.cppreference.com/w/cpp/utility/apply

https://en.cppreference.com/w/cpp/17

https://cloud.tencent.com/developer/article/1383177

 

https://www.jianshu.com/p/9b8eeddbf1e4

 

 

責任編輯:武曉燕 來源: 程序喵大人
相關推薦

2019-11-06 16:33:29

Ignite微軟技術

2024-05-08 08:50:39

React19模式UI

2025-01-02 15:14:01

2020-07-27 10:40:35

C++11語言代碼

2024-04-28 09:01:06

React 19更新前端

2024-12-27 09:12:12

C++17代碼元組

2020-10-14 15:00:38

Python 開發編程語言

2024-02-04 15:58:53

C++ 17編程代碼

2023-12-18 10:11:36

C++17C++代碼

2024-12-25 16:29:15

2023-11-15 20:51:18

TypeScript前端

2020-04-13 17:17:28

MySQL8.0功能

2021-09-28 10:37:50

LayUI JDK

2023-11-09 08:46:24

2024-12-23 16:15:02

2021-07-15 08:55:17

ES12 ECMAScript JS 功能

2023-12-02 08:55:18

Paru 2.0

2012-05-18 14:36:50

Fedora 17桌面環境

2024-04-03 08:47:58

React服務端組件Actions

2024-12-24 12:00:00

inlinC++17頭文件
點贊
收藏

51CTO技術棧公眾號

日韩电影在线观看中文字幕 | 国产美女诱惑一区二区| 日韩一级视频免费观看在线| 欧美一级中文字幕| 蜜桃av噜噜一区二区三区麻豆| 黄色欧美成人| 亚洲精品综合精品自拍| 成人免费在线观看视频网站| 黄色免费在线观看| 成年人国产精品| 国产精品∨欧美精品v日韩精品| 69亚洲乱人伦| 午夜欧美巨大性欧美巨大| 国产精品久久久久影视| 久久国产精品99久久久久久丝袜| 中文字幕人妻色偷偷久久| 国产在线成人| 中文字幕综合在线| 午夜av免费看| 99久久999| 一本久久精品一区二区| youjizz.com在线观看| 国产黄在线观看免费观看不卡| 国产成人鲁色资源国产91色综| 国产91亚洲精品| 日韩精品一区二区在线播放| 午夜激情久久| 亚洲色图色老头| 国产a√精品区二区三区四区| www.国产精品| 色婷婷久久久久swag精品| 免费看日本黄色| 久久久久久久久免费视频| 国产校园另类小说区| 国产一区二区精品在线| 国产三区在线播放| 六月丁香婷婷久久| 国产成+人+综合+亚洲欧美丁香花| 免费在线观看黄色av| 91精品秘密在线观看| 国产亚洲激情视频在线| 人妻大战黑人白浆狂泄| 精品日产乱码久久久久久仙踪林| 日韩视频在线你懂得| xxww在线观看| 九九久久国产| 色婷婷综合在线| 日韩黄色片视频| 欧美三级网站| 欧美日韩免费在线| 777精品久无码人妻蜜桃| 色噜噜狠狠狠综合欧洲色8| 中文字幕佐山爱一区二区免费| 伊人久久大香线蕉成人综合网| 国产福利小视频在线观看| 91蜜桃网址入口| 精品视频高清无人区区二区三区| 亚洲伦理在线观看| 成人毛片在线观看| 国内精品久久国产| 酒色婷婷桃色成人免费av网| 久久综合九色综合欧美98| 久久av一区二区三区漫画| 天堂成人在线| 国产偷国产偷亚洲高清人白洁| 日本成人三级电影网站| a黄色在线观看| 最新国产成人在线观看| 蜜臀在线免费观看| 激情影院在线观看| 国产精品美女久久久久久久久久久 | 手机在线看片1024| 日韩电影在线看| 国产欧美日韩亚洲精品| va视频在线观看| 不卡区在线中文字幕| 久久综合中文色婷婷| 国产www.大片在线| 亚洲色图清纯唯美| 一卡二卡三卡视频| 免费看av不卡| 6080亚洲精品一区二区| 久久精品aⅴ无码中文字字幕重口| 国产精品久av福利在线观看| 国产亚洲人成a一在线v站| 乱老熟女一区二区三区| 韩日在线一区| 欧美在线观看网站| 中文字幕在线观看视频一区| 国产高清久久久| 日韩av大全| 色综合999| 在线免费观看日韩欧美| 无套内谢丰满少妇中文字幕| 欧美久久香蕉| 日韩天堂在线视频| 91蜜桃视频在线观看| 青娱乐精品视频在线| dy888夜精品国产专区| 欧美一区二区三区少妇| 亚洲欧美一区二区三区孕妇| 男人添女人下面高潮视频| 国产极品嫩模在线观看91精品| 精品欧美黑人一区二区三区| 国产传媒国产传媒| 亚洲第一区色| 成人福利免费观看| 欧美女优在线| 亚洲午夜成aⅴ人片| 日本久久久久久久久久久久| y111111国产精品久久久| 国产一区二区三区日韩欧美| 日韩av一二三区| 精品一区二区三区免费| 欧美日韩视频在线一区二区观看视频| 深夜国产在线播放| 4438成人网| 国产精品亚洲无码| 亚洲国产专区校园欧美| 亚洲999一在线观看www| 成年人视频免费在线观看| 婷婷六月综合亚洲| 久久精品亚洲天堂| 欧美呦呦网站| 国产97色在线|日韩| 欧美自拍第一页| 亚洲欧美在线观看| the porn av| 国产一区二区三区站长工具| 久久免费视频在线观看| 国产aⅴ一区二区三区| 国产精品国产三级国产aⅴ入口| 国产精品99久久免费黑人人妻| 国产精品中文字幕制服诱惑| 色综合久久88色综合天天看泰| 91亚洲国产成人久久精品麻豆| 中文字幕不卡一区| 欧美黑人又粗又大又爽免费| 国产欧美日韩| 国产91在线视频| 国产综合视频一区二区三区免费| 精品国产福利视频| 水蜜桃av无码| 日韩午夜精品| 欧美理论一区二区| 色在线视频观看| 日韩精品一二三四区| 圆产精品久久久久久久久久久| 成人美女在线视频| av日韩一区二区三区| 国产欧美啪啪| 茄子视频成人在线| 国产在线网站| 欧美性猛交xxxxxxxx| 国产破处视频在线观看| 看片网站欧美日韩| 黄色一级视频播放| 77成人影视| 91产国在线观看动作片喷水| 日韩av高清在线| 91久久免费观看| 亚洲AV成人无码网站天堂久久| 久久精品国产免费| 老司机午夜免费福利视频| 超碰精品在线| 91精品国产精品| 欧美捆绑视频| 欧美日韩国产系列| 私库av在线播放| 波多野结衣一区二区三区 | 日韩欧美一区二区三区四区| 日韩久久一区二区三区| www.日韩不卡电影av| 国产黄色片免费观看| 天天综合天天综合色| 免费看黄色的视频| 韩国av一区二区三区在线观看| 中文精品无码中文字幕无码专区 | 亚洲春色在线| 国产中文欧美日韩在线| 午夜精品视频网站| 国产一区二区影视| 日韩亚洲欧美中文三级| 国产精品自拍99| 国产精品嫩草99a| 日本精品一二三区| 青青青爽久久午夜综合久久午夜| ijzzijzzij亚洲大全| 老司机aⅴ在线精品导航| 国产精品www色诱视频| 亚洲小说区图片区都市| 国产网站欧美日韩免费精品在线观看 | 婷婷av在线| 亚洲人成电影网站色| 国产黄色一区二区| 亚洲精品麻豆| 91精品一区二区三区久久久久久 | 国产热re99久久6国产精品| 成人影院在线观看| 亚洲欧美成人网| 国产农村妇女毛片精品久久| 疯狂蹂躏欧美一区二区精品| 成人做爰视频网站| 91免费看视频| 美女流白浆视频| 日韩vs国产vs欧美| 免费观看国产精品视频| 我不卡影院28| 日韩影视精品| 欧美一级一片| 成人av中文| 成年永久一区二区三区免费视频| 日本精品一区二区三区在线| 欧美巨大xxxx做受沙滩| 少妇高潮久久久久久潘金莲| 五月天婷婷在线观看| 日韩欧美中文字幕制服| 中文字幕在线播放日韩| 色狠狠桃花综合| 国产成人啪精品午夜在线观看| 亚洲欧美中日韩| 日本在线观看网址| 国产欧美精品一区二区三区四区 | 夜夜嗨av一区二区三区四季av| 国产高清一区二区三区四区| 92精品国产成人观看免费 | 久久久久久久久久电影| av在线播放网址| 国产a久久麻豆| 免费不卡av网站| 国产乱码精品1区2区3区| 欧美黄色性生活| 日韩精彩视频在线观看| 亚洲国产精品久久久久爰色欲| 夜夜夜久久久| 欧美视频在线观看网站| 精品福利电影| 女人帮男人橹视频播放| 国产字幕视频一区二区| 麻豆视频传媒入口| 中文无码久久精品| 成人黄色片免费| 韩国av一区| 激情伊人五月天| 国产精品久久久免费| 国产精品沙发午睡系列| 99国产精品视频免费观看一公开 | 美女久久久精品| 在线观看免费的av| 麻豆国产欧美一区二区三区| 国产区二区三区| 激情综合五月婷婷| xxxx国产视频| av成人免费在线观看| 久久久久亚洲无码| 26uuu欧美| 国产高清一区二区三区四区| 中文字幕精品一区| 国产精品99久久久久久成人| 亚洲欧美区自拍先锋| 久草资源在线视频| 五月天激情综合| 免费一级a毛片| 欧美日韩国产精品成人| www.国产免费| 亚洲精品国产精品乱码不99按摩 | 日本在线视频一区二区三区| 成人欧美一区二区三区视频 | 亚洲欧美精品| 亚洲成人精品| 少妇大叫太大太粗太爽了a片小说| 韩国欧美一区| 国产二区视频在线播放| 日韩av高清在线观看| 九九九九九国产| 成人av免费网站| 亚洲а∨天堂久久精品2021| 亚洲人成电影网站色mp4| 国产无套内射又大又猛又粗又爽| 日韩欧美成人网| 国产精品久久久久久免费| 精品久久久影院| 成人精品一区二区三区校园激情| 久久高清视频免费| 成人香蕉视频| 成人免费网站在线观看| 免费福利视频一区| 一区二区三区av在线| 激情久久久久久久| 五月婷婷狠狠操| 夫妻av一区二区| 亚洲欧美日韩第一页| 精品国产鲁一鲁一区二区张丽| 中文字幕91爱爱| 亚洲黄页视频免费观看| 免费av毛片在线看| 欧美在线视频播放| 日本一区二区乱| 亚洲精品视频一区二区三区| 悠悠资源网久久精品| 久久国产这里只有精品| 91丨porny丨在线| 黑鬼狂亚洲人videos| 欧美在线看片a免费观看| 亚洲精品97久久中文字幕无码| 在线亚洲欧美视频| 松下纱荣子在线观看| 91久久久一线二线三线品牌| 日本不卡二三区| 日本wwww视频| 岛国精品在线播放| 亚洲 欧美 变态 另类 综合| 色视频成人在线观看免| 性做久久久久久久久久| 久久久99久久精品女同性| 欧美电影h版| 久久青青草原一区二区| 国产在线不卡| 先锋资源在线视频| 亚洲欧洲在线观看av| 91视频在线视频| 亚洲精品小视频| 国产v日韩v欧美v| 国产69精品久久久久9999apgf | 久久视频中文字幕| 成人做爰视频www| 日本在线视频不卡| 久久动漫亚洲| 国产艳俗歌舞表演hd| 精品久久久免费| 少妇无码一区二区三区| 欧美国产激情18| 日韩高清在线观看一区二区| 一区二区三区四区免费视频| 日韩精品乱码免费| mm131丰满少妇人体欣赏图| 欧美日韩中文字幕| 色视频在线观看免费| 18久久久久久| 日韩激情啪啪| 不卡影院一区二区| a级精品国产片在线观看| 国产精品99精品无码视| 精品少妇一区二区三区在线播放| 91亚洲天堂| 99在线观看| 日韩午夜在线| 国产熟妇搡bbbb搡bbbb| 日本韩国欧美国产| 福利在线午夜| 国产一区二区在线免费| 国产精品伦理久久久久久| 成年人三级黄色片| 国产精品成人免费| 午夜精品久久久久久久第一页按摩| 欧美成人激情视频免费观看| 涩涩屋成人免费视频软件| 日韩亚洲欧美视频| 久久伊99综合婷婷久久伊| 少妇高潮av久久久久久| 最近2019中文字幕在线高清| 色999韩欧美国产综合俺来也| 日韩中文字幕亚洲精品欧美| 床上的激情91.| 日日骚av一区二区| 色噜噜狠狠狠综合曰曰曰88av| 不卡一区视频| 日韩伦理在线免费观看| 久久久国产精品麻豆| 一区二区不卡视频在线观看| 九九热最新视频//这里只有精品| 精品亚洲精品| 香蕉视频网站入口| 亚洲卡通动漫在线| 天天干天天做天天操| 国产精品日韩在线观看| 综合日韩在线| 真人bbbbbbbbb毛片| 欧美日韩激情一区二区三区| 午夜av在线播放| 青青草原亚洲| 岛国av在线一区| 国产一级片一区二区| 色综合色综合久久综合频道88| 欧美美乳视频| 亚洲精品久久久久久| 欧美日韩一区二区在线| 嫩草在线视频| 久久综合伊人77777麻豆| 国内精品免费在线观看| 国产精品视频免费播放| 久久精品2019中文字幕| 久久男人av| 日韩欧美色视频| 日本二三区不卡| 青草视频在线免费直播| 日韩在线电影一区| 成人av在线网站| 一级全黄少妇性色生活片| 91大神福利视频在线|