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

模仿 gTest 從零實現一個測試框架:使用現代 C++ 改造

開發 測試
本文將介紹如何使用現代 C++ 特性優化代碼,這些改進使代碼更現代化,性能更好,同時保持了原有的功能完整性。

本文將介紹如何使用現代 C++ 特性優化代碼,主要包括以下內容。下面,讓我們開始代碼優化之旅!

1. 單例模式的魔法改造

讓我們先看看單例模式的優化:

// ?? 使用 inline 關鍵字讓編譯器更聰明地內聯展開
static inline ETest& GetInstance() {
    // ?? static 保證線程安全的懶漢式初始化
    static ETest instance;  
    return instance;        // ?? 返回唯一實例
}

為什么要這樣改進呢? 

  • inline 建議編譯器將函數內聯展開,減少函數調用開銷 
  • static 局部變量保證了線程安全的初始化
  • 返回引用避免了不必要的拷貝

為什么要建議使用 inline? 

  • 減少函數調用開銷
  • 避免了函數調用時的棧幀創建和銷毀
  • 省去了參數傳遞和返回值復制的開銷

編譯器優化:

  • 讓編譯器有機會進行更多的上下文相關優化
  • 可以直接在調用處展開代碼,提升執行效率

特別適合單例模式:

  • GetInstance() 經常被調用
  • 函數體積小,非常適合內聯
  • 可以和編譯器的其他優化更好地配合

注意事項

  • inline 只是對編譯器的建議,不是強制命令
  • 現代編譯器已經很智能,會自動決定是否內聯
  • 但在關鍵路徑上顯式標記 inline 仍然是好習慣

2. 現代化的函數處理方式

來看看如何讓函數調用更靈活:

// ?? 使用 std::function 支持各種可調用對象
using TestFunction = std::function<void()>;

// ?? 支持移動語義的測試用例添加
void AddTest(std::string name, TestFunction test_func) {
    // ?? 使用 emplace_back 直接構造,避免拷貝
    tests_.emplace_back(std::move(name), std::move(test_func));
}

這樣改進的好處是:

  • 可以接受 lambda 表達式啦!
  • 支持任何可調用對象,更加靈活
  • 使用移動語義提升性能

為什么使用值傳遞而不是引用? 

你可能會問:為什么 name 參數要從之前的引用傳遞 const std::string& 改為值傳遞?這其實是現代 C++ 的一個最佳實踐!

// ?? 兩種方式的對比
void AddTest(std::string name, ...);              // ? 值傳遞方式
void AddTest(const std::string& name, ...);       // ? 引用方式

值傳遞的優勢:

  • 臨時對象情況
// 場景1: 傳入字符串字面量
AddTest("test_name", ...);  // 值傳遞:0次拷貝(直接移動)
                            // 引用傳遞:1次拷貝(在emplace_back時)

// 值傳遞的過程:
// 1. "test_name" -> 創建臨時 std::string
// 2. 通過移動構造傳入函數
// 3. 通過移動構造存入 vector
// 總計: 1次構造, 2次移動

// 引用傳遞的過程:
// 1. "test_name" -> 創建臨時 std::string (作為引用參數)
// 2. 在 vector.emplace_back 時復制構造
// 總計: 1次構造, 1次拷貝
  • 具名變量情況
std::string name = "test";
AddTest(name, ...);         // 值傳遞:1次拷貝
                            // 引用傳遞:1次拷貝(在emplace_back時)

// 值傳遞的過程:
// 1. name 被拷貝構造到函數參數
// 2. 函數參數被移動構造到 vector
// 總計: 1次拷貝, 1次移動

// 引用傳遞的過程:
// 1. name 作為引用傳入(無開銷)
// 2. 在 vector.emplace_back 時拷貝構造
// 總計: 1次拷貝
  • 移動語義情況
std::string name = "test";
AddTest(std::move(name), ...);  

// 值傳遞的過程:
// 1. name 被移動構造到函數參數
// 2. 函數參數被移動構造到 vector
// 總計: 2次移動

// 引用傳遞的過程:
// 1. 移動后的 name 作為引用傳入
// 2. 在 vector.emplace_back 時移動構造
// 總計: 1次移動

性能分析總結:

  • 臨時對象:值傳遞略勝(避免了一次拷貝)
  • 具名變量:基本持平(都需要一次拷貝)
  • 移動語義:引用傳遞略勝(少一次移動)

但考慮到:

(1) 代碼可維護性

  • 值傳遞明確表明參數會被存儲
  • 避免懸垂引用風險
  • 性能表現更加統一和可預測

(2) 代碼清晰度

  • 值傳遞的語義更清晰
  • 不需要考慮參數生命周期
  • 減少 std::move 的使用場景

(3) 編譯器優化

  • 現代編譯器對值傳遞有很好的優化
  • 可以利用 RVO/NRVO 優化
  • 內聯時可能消除額外的開銷

因此,在這種"參數最終會被存儲"的場景下,推薦使用值傳遞。這種"按值傳遞并移動"的模式已成為現代 C++ 的最佳實踐。?

3. 性能小貼士

看看這些貼心的性能優化:

// ?? 構造函數中預分配內存
ETest() { 
    tests_.reserve(100);  // ?? 避免頻繁擴容
}

// ?? 測試用例的完美轉發構造
TestCase(std::string n, TestFunction f) 
    : name(std::move(n)),    // ?? 移動而不是拷貝
      func(std::move(f)) {}  // ?? 同樣移動提升性能

這些優化的效果:

  • 預分配內存減少重新分配的次數
  • 移動語義避免不必要的拷貝
  • 構造函數初始化列表更高效

4. 更智能的斷言

來看看更強大的斷言實現:

#define ASSERT_EQ(expected, actual)                    \
  do {                                                 \
    const auto& exp = (expected);    // ?? 避免重復求值  \
    const auto& act = (actual);      // ?? 使用引用     \
    if (exp != act) {               // ?? 比較結果      \
      // ... 錯誤處理 ...           // ?? 清晰的錯誤信息 
    }                                                 \
  } while (0)                       // ??? 安全的宏結構

為什么這樣寫更好:

  • do-while(0) 讓宏更安全
  • 引用避免重復計算
  • 清晰的錯誤信息更容易調試

每個小改進都在讓代碼變得更好,這就是現代 C++ 的魔力! 

5. 異常安全性與const正確性

// ??? 使用 noexcept 標記不會拋出異常的函數
void RunAllTests() noexcept {
    TestStats stats;
    // ...
}

// ? 使用 const 成員函數表明函數不會修改對象狀態
void PrintTestSummary(const TestStats& stats) const {
    // ...
}

為什么要使用這些特性?

(1) noexcept 的優勢

  • 提供編譯器優化機會
  • 明確函數的異常安全性保證
  • 避免異常展開帶來的性能開銷
  • 在STL容器操作中可能獲得更好的性能

(2) const 成員函數的好處

  • 表明函數不會修改對象狀態
  • 允許在const對象上調用
  • 提高代碼可讀性和可維護性
  • 幫助編譯器進行優化

6. 字符串視圖優化

// 使用 std::string_view 優化字符串處理
void LogError(std::string_view message) {
    std::cout << message << std::endl;
}

std::string_view 的優勢:

  • 零拷貝字符串操作
  • 可以直接接受字符串字面量
  • 比 const std::string& 更輕量
  • 適用于只讀字符串場景

使用場景:

// 舊方式
void Log(const std::string& msg);  // 可能導致不必要的字符串構造

// 新方式
void Log(std::string_view msg);    // 更高效,沒有額外開銷

// 使用示例
Log("直接使用字面量");            // ? 完全沒有構造開銷
std::string str = "test";
Log(str);                         // ? 也可以接受 string

這些現代C++特性不僅能提升代碼的性能,還能增加代碼的安全性和可維護性。在適當的場景下使用這些特性,能讓我們的代碼更加優雅和高效。

總結

主要優化點包括:

  • 使用 std::function 替代函數指針,提供更好的靈活性,支持 lambda 表達式和其他可調用對象
  • 添加 inline 關鍵字優化單例實現
  • 使用 std::move 和移動語義優化性能
  • 添加 noexcept 標記提供更好的異常安全性保證
  • 使用 const 成員函數增加代碼的可維護性
  • 使用 std::string_view 優化字符串處理
  • 改進斷言宏的實現,使用 do {...} while(0) 結構確保宏的安全性
  • 為 vector 預留空間,減少重新分配
  • 使用構造函數初始化列表優化對象構造
  • 使用 emplace_back 替代 push_back 提高性能

這些改進使代碼更現代化,性能更好,同時保持了原有的功能完整性。

完整代碼

完整代碼如下:

#ifndef ETEST_H
#define ETEST_H

#include <chrono>
#include <functional>
#include <iomanip>
#include <iostream>
#include <string>
#include <vector>

class ETest {
public: // 公開接口 ??
  // 獲取單例實例 ??
  static inline ETest &GetInstance() {
    static ETest instance;
    return instance;
  }

  // 測試注冊器 ??
  using TestFunction = std::function<void()>;
  void AddTest(std::string name, TestFunction test_func) {
    tests_.emplace_back(std::move(name), std::move(test_func));
  }

  // 測試執行器 ??
  void RunAllTests() noexcept {
    TestStats stats;
    std::cout << "\033[1;36m?? Starting tests...\033[0m\n";

    for (const auto &test : tests_) {
      stats.total++;
      auto start = std::chrono::high_resolution_clock::now();

      try {
        std::cout << "?? Running: " << test.name << std::endl;
        test.func();
        stats.passed++;
        std::cout << "\033[1;32m? PASSED\033[0m: " << test.name << std::endl;
      } catch (const std::exception &e) {
        stats.failed++;
        std::cout << "\033[1;31m? FAILED\033[0m: " << test.name << "\n";
        std::cout << "  Error: " << e.what() << std::endl;
      }

      auto end = std::chrono::high_resolution_clock::now();
      stats.totalTime += std::chrono::duration<double>(end - start).count();
    }

    // 打印統計結果
    PrintTestSummary(stats);
  }

private: // 內部實現 ??
  // 私有構造函數 - 防止外部創建實例 ??
  ETest() { tests_.reserve(100); }

  // 刪除拷貝和賦值功能 - 確保唯一性 ?
  ETest(const ETest &) = delete;
  ETest &operator=(const ETest &) = delete;

  struct TestCase {
    std::string name;  // 測試名稱
    TestFunction func; // 測試函數指針 ??

    // 使用構造函數初始化列表
    TestCase(std::string n, TestFunction f)
        : name(std::move(n)), func(std::move(f)) {}
  };

  std::vector<TestCase> tests_; // 存儲所有測試用例 ??

  // 添加測試結果統計
  struct TestStats {
    int total = 0;
    int passed = 0;
    int failed = 0;
    double totalTime = 0.0;
  };

  void PrintTestSummary(const TestStats &stats) const {
    std::cout << "\n=========================\n";
    std::cout << "?? Test Summary:\n";
    std::cout << "Total: " << stats.total << " tests\n";
    std::cout << "\033[1;32mPassed: " << stats.passed << "\033[0m\n";
    std::cout << "\033[1;31mFailed: " << stats.failed << "\033[0m\n";
    std::cout << "Time: " << std::fixed << std::setprecision(3)
              << stats.totalTime << "s\n";
    std::cout << "=========================\n";
  }
};

// 改進斷言宏,使用 constexpr 和 std::string_view
#define ASSERT(condition)                                                      \
  if (!(condition)) {                                                          \
    const auto message = std::string("Assertion failed: ") + #condition;       \
    std::cout << "\033[1;31m" << message << "\033[0m\n"                        \
              << "File: " << std::string_view(__FILE__) << "\n"                \
              << "Line: " << __LINE__ << std::endl;                            \
    throw std::runtime_error(message);                                         \
  }

// 使用模板改進 ASSERT_EQ
#define ASSERT_EQ(expected, actual)                                            \
  do {                                                                         \
    const auto &exp = (expected);                                              \
    const auto &act = (actual);                                                \
    if (exp != act) {                                                          \
      std::ostringstream oss;                                                  \
      oss << "Expected: " << exp << "\nActual: " << act;                       \
      const auto message = oss.str();                                          \
      std::cout << "\033[1;31mAssertion failed\033[0m\n"                       \
                << message << "\nFile: " << std::string_view(__FILE__)         \
                << "\nLine: " << __LINE__ << std::endl;                        \
      throw std::runtime_error(message);                                       \
    }                                                                          \
  } while (0)

#define TEST(name)                                                             \
  void test_##name();                                                          \
  struct Register##name {                                                      \
    Register##name() { ETest::GetInstance().AddTest(#name, test_##name); }     \
  } register##name##Instance;                                                  \
  void test_##name()

#endif

責任編輯:趙寧寧 來源: everystep
相關推薦

2024-09-25 08:28:45

2020-09-24 11:46:03

Promise

2016-09-14 17:48:44

2019-04-24 15:06:37

Http服務器協議

2021-06-30 07:19:36

網絡安全

2021-08-04 05:49:40

數據庫數時序數據庫技術

2021-09-02 10:01:58

Spring 容器AOP

2011-08-22 13:57:55

gtest

2021-10-27 11:29:32

框架Web開發

2010-02-06 09:46:46

C++單向鏈表

2020-08-07 10:40:56

Node.jsexpress前端

2014-09-25 09:51:29

Android App個人博客

2011-09-16 10:00:56

C++

2025-05-13 10:17:40

C++現代版AI

2010-02-06 13:42:36

C++單件模式

2022-06-20 09:01:56

Plasmo開源

2021-06-08 07:32:01

框架Mock測試

2021-05-28 18:12:51

C++設計

2020-08-17 08:20:16

iOSAOP框架

2016-10-20 16:07:11

C++Modern C++異步
點贊
收藏

51CTO技術棧公眾號

日韩中文字幕有码| 男女裸体影院高潮| 久久久久久av无码免费看大片| 精品精品99| 在线播放欧美女士性生活| 一级性生活视频| 男人天堂综合| 久久99精品国产91久久来源| 欧美激情中文网| 久久精品成人av| 韩国一区二区三区视频| 福利精品视频在线| 四虎影院一区二区| 日漫免费在线观看网站| 久色婷婷小香蕉久久| 韩国一区二区电影| 精品在线观看一区| 成人直播在线观看| 欧美精品久久天天躁| 成熟了的熟妇毛茸茸| gogo在线观看| 国产欧美日韩久久| 国产精品一区二区三区精品| 亚洲图片欧美在线| 噜噜噜91成人网| 欧美日本在线视频中文字字幕| 精品人伦一区二区| 北条麻妃一区二区三区在线观看| 欧美日韩欧美一区二区| 久久久999视频| 怡红院红怡院欧美aⅴ怡春院| 久久精品在线免费观看| 国产女主播一区二区| 国产又粗又猛视频| 男女男精品视频| 日本久久久久久久久| 日韩少妇裸体做爰视频| 欧美女激情福利| 俺去啦;欧美日韩| 级毛片内射视频| 色天天色综合| 亚洲国产三级网| 国产精久久久久| 白嫩亚洲一区二区三区| 欧美性生活影院| 黑人糟蹋人妻hd中文字幕| heyzo高清在线| 一区二区三区四区在线播放| 一区二区三区四区不卡| 成人午夜在线观看视频| 久久精品一区二区三区不卡| 欧美日韩三区四区| 人操人视频在线观看| 97超碰欧美中文字幕| 精品国产一区二区三区麻豆小说 | www国产视频| 88久久精品| 亚洲第一在线视频| 亚洲av成人无码一二三在线观看| 成人福利免费在线观看| 精品少妇一区二区三区视频免付费 | 日韩精品一二三区| 国产mv久久久| 中国一级特黄视频| 久久国产精品色| 成人综合网网址| 精品毛片在线观看| 岛国精品在线观看| 久久久精品国产一区二区三区| 欧美日本网站| 国产精品丝袜一区| 97超碰免费观看| 欧美性video| 午夜视频在线观看一区| 99热在线这里只有精品| 日韩欧美一区二区三区在线观看| 91成人免费在线| 性刺激的欧美三级视频| 国产精品视频一区视频二区 | 中文字幕中文在线| 日韩视频一二区| 亚洲精品一线二线三线无人区| 欧美夫妇交换xxx| 国产99亚洲| 日韩中文字幕亚洲| 精品无码人妻一区二区三| 国产欧美在线| 国产精品一区电影| 亚洲AV无码一区二区三区少妇 | 伊人春色在线观看| 午夜精品视频一区| 一本岛在线视频| 91成人在线精品视频| 亚洲欧美第一页| 国产精品免费在线视频| 亚洲啪啪91| 国产精品久久久久久久一区探花 | 日韩激情第一页| 手机免费观看av| 影音先锋久久| 国产在线视频不卡| 五月婷婷丁香六月| 18欧美亚洲精品| 国产精品va无码一区二区| 四虎精品在线观看| 亚洲精品乱码久久久久久金桔影视| 国产精品久久久视频| 国产字幕视频一区二区| 国产精品成人v| 成人小说亚洲一区二区三区| 国产日韩欧美在线一区| 日韩国产小视频| 99久久亚洲国产日韩美女| 精品国产免费视频| 国产成人精品视频免费| 亚洲一区图片| 风间由美一区二区三区| 9色在线视频网站| 午夜a成v人精品| 三上悠亚 电影| 成人女性视频| 全球成人中文在线| 免费国产精品视频| 亚洲人成7777| 午夜宅男在线视频| 中文字幕亚洲影视| 97国产suv精品一区二区62| 国产免费黄色录像| 欧美国产一区视频在线观看| 欧美三级一级片| 在线观看视频一区二区三区| 北条麻妃99精品青青久久| 一级一片免费看| 91亚洲永久精品| 久久国产精品网| 超碰97成人| 欧美极品第一页| 国内精品国产成人国产三级| 自拍偷拍欧美精品| 日韩va在线观看| 久久一区二区三区电影| 国产精品久久久| 999国产在线| 成年人免费高清视频| 懂色av一区二区三区免费看| 麻豆视频传媒入口| 精品久久亚洲| 久久伊人精品一区二区三区| 国产又粗又长又大视频| 中文字幕永久在线不卡| 亚洲高清在线免费观看| 精品久久电影| 国产精品嫩草影院久久久| 北岛玲一区二区三区| 欧美午夜精品久久久久久超碰| 亚洲精品国产精品国自产网站| 久久精品一本| 日韩午夜视频在线观看| 成人精品动漫| 久久精品人人做人人爽| 国产夫绿帽单男3p精品视频| 亚洲午夜视频在线观看| 污污免费在线观看| 国产精品久久久久毛片大屁完整版| 精品欧美国产| 日产精品一区| 亚洲一区二区三区四区五区黄 | 国产综合视频在线观看| 99青草视频在线播放视| 欧美日韩卡一卡二| 性生交大片免费全黄| 国产一区二区三区国产| 大片在线观看网站免费收看| 第四色中文综合网| 日产精品99久久久久久| www.亚洲免费| 欧美电影一区二区| 久久无码精品丰满人妻| 成人久久18免费网站麻豆| www.av中文字幕| 国产99久久精品一区二区300| 国产玖玖精品视频| 性欧美1819sex性高清大胸| 精品国产一区二区三区不卡 | 天堂蜜桃91精品| 一本色道久久99精品综合| 日韩精品一区二区三区免费视频| 97超碰国产精品女人人人爽| 国产在线观看网站| 7777精品伊人久久久大香线蕉完整版 | 午夜精品99久久免费| 国产对白叫床清晰在线播放| 欧美一区二区三区在线观看| 国产手机在线视频| 国产精品毛片大码女人| 国产精品一区二区无码对白| 日韩精品一二三区| 东北少妇不带套对白| 国产精品嫩草影院在线看| 91在线无精精品一区二区| 在线能看的av网址| 久久精品一区中文字幕| 色视频在线观看福利| 欧美一区二区在线不卡| 国产美女激情视频| 亚洲精品va在线观看| 精品人妻一区二区三区四区| 成人午夜免费视频| 99re精彩视频| 久久高清国产| 黄色片免费在线观看视频| 国产亚洲一区二区三区不卡| 国产精品久久一区二区三区| 另类一区二区三区| 日本精品视频在线观看| 久久免费电影| 久久精品久久久久| 成人免费高清在线播放| 亚洲精品狠狠操| 精品人妻少妇AV无码专区| 欧美亚洲高清一区| 国产午夜免费福利| 亚洲成人综合视频| avove在线播放| 中文字幕av一区二区三区高| 中文字幕国产专区| 波多野结衣在线一区| 国产精品久久久久久久av福利| 午夜综合激情| 91成人综合网| 亚洲国产精品久久久天堂| 日韩欧美精品久久| 久久av资源| 免费国产一区二区| 欧美日韩一区二区三区四区不卡 | 国产精品午夜福利| 欧美性三三影院| 秋霞精品一区二区三区| 一区二区三区免费在线观看| www.av免费| 中文字幕永久在线不卡| 国产18无套直看片| 欧美国产精品久久| 成人激情五月天| 久久精品欧美一区二区三区不卡| 亚欧洲乱码视频| 久久久久国产免费免费| 三上悠亚ssⅰn939无码播放 | 欧美肉大捧一进一出免费视频| 国产99精品国产| 毛片毛片毛片毛片毛| 国产美女在线精品| 在线观看日本www| 国产综合色产在线精品| 17c国产在线| 国产呦萝稀缺另类资源| 男女视频在线观看网站| 国产精品亚洲专一区二区三区| 日本网站在线看| 国产精品主播直播| 亚洲一级Av无码毛片久久精品| 成人小视频在线| 中文字幕三级电影| 97精品视频在线观看自产线路二| 精品黑人一区二区三区观看时间| 国产成人午夜电影网| 黄色免费视频网站| 久久久噜噜噜久噜久久综合| 国产美女免费网站| 亚洲三级电影网站| 久久久久久久久久久久久久免费看| 亚洲成人黄色影院| 超碰在线观看91| 欧美日韩电影在线| 亚洲老妇色熟女老太| 精品网站999www| av在线免费观看网站| 欧美成人第一页| 成人免费观看在线观看| 国产成人亚洲精品| 国产午夜亚洲精品一级在线| 狠狠色综合网站久久久久久久| 国产99久久精品一区二区300| 亚洲精品偷拍视频| 国产日韩欧美在线播放不卡| 中文字幕视频在线免费观看| 国产传媒一区在线| 亚洲成人日韩在线| 亚洲视频小说图片| 天天操天天爽天天干| 欧美日韩和欧美的一区二区| 国产美女久久久| 日本黄色一区| 91在线短视频| 国产亚洲精品美女久久久久久久久久| 国产手机视频在线观看| 国产视频久久| 深爱五月综合网| 久久精品网站免费观看| 欧美激情精品久久| 色欧美乱欧美15图片| 精品人妻一区二区三区三区四区| 亚洲男人天堂古典| 99热国产在线中文| 日韩免费在线播放| jizz性欧美23| 中文字幕人成一区| 免费在线观看成人av| 又色又爽又黄18网站| 国产欧美日韩卡一| 国产精品视频免费播放| 日韩一级成人av| 91高清在线| 欧美中在线观看| 成人另类视频| 国产在线拍揄自揄拍无码| 青青草91视频| 李宗瑞91在线正在播放| 亚洲国产婷婷综合在线精品| 国产绿帽一区二区三区| 在线免费观看羞羞视频一区二区| 色是在线视频| 国产一区二区高清不卡 | 欧美 国产 精品| 日本不卡不码高清免费观看| 不卡一区二区在线观看| 亚洲影院免费观看| 国产内射老熟女aaaa∵| 日韩中文字幕网址| 亚洲伦乱视频| 欧美不卡三区| 国产日韩欧美一区在线| 这里只有精品在线观看视频| 亚洲精品国产精品乱码不99| 91在线视频国产| 中文字幕在线视频日韩| 免费高清视频在线一区| 欧美中文娱乐网| 久久久久国产精品午夜一区| 国产精品一二三视频| 老司机aⅴ在线精品导航| 国产乱人伦精品一区二区三区| 国精产品一区一区三区mba桃花| 91动漫免费网站| 欧美日韩亚洲国产综合| 91涩漫在线观看| 国产日产久久高清欧美一区| 日韩电影免费网址| 九九热99视频| 亚洲少妇最新在线视频| h片在线免费看| 久久91超碰青草是什么| 亚洲国产高清在线观看| 国产在线xxxx| 成人aa视频在线观看| 国产三级av片| 亚洲天堂成人在线视频| 久久久成人av毛片免费观看| 亚洲电影一二三区| 九九九久久久精品| 国产女片a归国片aa| 日韩a一区二区| 欧美日韩精品中文字幕一区二区| 久久久xxx| 亚洲图片第一页| 91精品国产综合久久香蕉的特点| av在线免费网站| 国产精华一区| 一区二区三区国产盗摄| 国产激情在线免费观看| 欧美性xxxxxxxx| 国产在线高清理伦片a| 风间由美久久久| 免费视频一区| 在线观看美女av| 欧美精品一区二区三区蜜臀| 成人影院av| 欧美日韩在线免费观看视频| 国产.精品.日韩.另类.中文.在线.播放| 日韩欧美一区二区一幕| 在线观看国产精品日韩av| 国产精品美女久久久久| 国产在线播放观看| 国产日韩欧美精品在线| 国产夫绿帽单男3p精品视频| 奇米影视亚洲狠狠色| 99精品视频在线| 波多野结衣加勒比| 欧美日韩激情一区二区| 两个人看的在线视频www| 午夜老司机精品| 东方aⅴ免费观看久久av| 久久影视中文字幕| 欧美大肥婆大肥bbbbb| 亚洲自拍都市欧美小说| 国产资源中文字幕| 日韩欧美在线国产| 在线看福利影| 日韩欧美精品在线不卡| 成人综合婷婷国产精品久久免费|