色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

C++模板編譯報錯排查指南:讀懂實例化、用靜態(tài)斷言與類型翻譯定位問題

C++模板編譯報錯排查指南:讀懂實例化、用靜態(tài)斷言與類型翻譯定位問題 模板編譯報錯讀不懂真不怪你。C的模板在編譯期展開時編譯器打印錯誤的方式天然反人類它不會像運行期調(diào)試器那樣告訴你程序停在命令行斷點當前變量長這樣而是甩給你一長串以std::開頭的類型聲明外加一段in instantiation of的實例化回溯。你盯著屏幕想找我到底哪寫錯了結(jié)果滿屏都是std::__cxx11::basic_stringchar, std::char_traitschar, std::allocatorchar這種恨不得把全家譜都列出來的類型全名。這兩者的差距就是大多數(shù)人接觸模板元編程時最大的勸退點。編譯期調(diào)試和運行期調(diào)試完全是兩套方法論運行期你可以打斷點、看變量、單步走編譯期你只能通過制造錯誤、約束錯誤、翻譯錯誤來讓編譯器替你回答問題。這篇東西就是把我這些年跟模板編譯期報錯死磕的經(jīng)驗整理出來講講靜態(tài)斷言怎么用才能當調(diào)試終端使遞歸模板失控怎么定位類型名太長怎么給它配個翻譯器以及多文件場景下模板重定義這類報錯到底該怎么排查。想認真學(xué)模板元編程、被SFINAE和偏特化折磨到懷疑人生的朋友這篇應(yīng)該能幫你省下不少查資料的功夫。先說明一下這里說的模板是C類模板、函數(shù)模板、變量模板這套編譯期實例化機制不是前端模板字符串也不是服務(wù)端模板引擎的調(diào)試。1. 編譯期報錯為何勸退人錯誤信息結(jié)構(gòu)與模板實例化的割裂很多人第一次嘗試讀模板編譯錯誤時心態(tài)直接崩掉根源在于他沒有理解編譯器在編譯模板時到底經(jīng)歷了什么。普通函數(shù)的編譯錯誤很好懂編譯器看到一個函數(shù)調(diào)用參數(shù)類型對不上直接報第幾行參數(shù)不匹配。但模板不一樣。模板本身不是最終代碼它只是一個生成方案的說明書。編譯器在遇到模板實例化請求時會把模板參數(shù)代入生成一份具體的類或函數(shù)然后才能做類型檢查。這個過程里任何一步類型不匹配錯誤信息都會包含從最初的實例化請求到失敗的那個模板最深處的成員之間的完整鏈條。舉個例子你在main.cpp里寫了std::vectorint v; v.push_back(hello);表面上看錯誤點在push_back調(diào)用。但編譯器實際報錯時會先給出當前實例化鏈main.cpp第3行實例化std::vectorint然后push_back定義在/usr/include/c/.../vector的某個頭文件里在那里對const char*到int的轉(zhuǎn)換失敗。報錯信息的結(jié)構(gòu)大致是三層是什么no matching function for call to std::vectorint::push_back(const char [6])在哪從main.cpp的調(diào)用點到stl_vector.h內(nèi)部定義的展開點為什么no known conversion from const char [6] to int運行期調(diào)試你可以在任意一行設(shè)斷點觀察那一刻的執(zhí)行狀態(tài)。但編譯期沒有斷點這個概念你不能讓模板實例化到一半停下來打開某個類型看看里面的成員有哪些。你能做的最接近的事情是想辦法讓某個關(guān)鍵位置的類型顯形然后根據(jù)編譯器對這個顯形結(jié)果的反饋來推斷。換句話說編譯期調(diào)試的核心思路是別指望編譯器給你完整答案你要設(shè)計一個個小實驗讓編譯器在某個特定位置停下來把信息吐出來。這個思路一旦建立后面所有手段——靜態(tài)斷言、輔助模板、類型名翻譯——其實都是圍繞它展開的。另外還有個認知誤區(qū)要破掉模板報錯信息長不代表你寫錯了N處往往只是第一個錯誤引發(fā)了后續(xù)一堆連鎖反應(yīng)。編譯器在模板實例化失敗后會嘗試繼續(xù)檢查別的實例化路徑但很多報錯其實是同一根因的重復(fù)輸出。所以調(diào)試模板報錯的第一原則是**只盯著第一條error看后面的error大概率是這條的次生災(zāi)害。**我見過有人在一條編譯日志里看到五十多個error以為是五十多個bug其實第一條改掉剩下四十九條全部消失。理解了這個底層機制再看下面這些調(diào)試手段你會知道每個手段分別是針對是什么在哪為什么中的哪一層。2. 靜態(tài)斷言的正確用法把編譯期當成調(diào)試器終端static_assert可能是模板調(diào)試里最被低估的工具。很多人只拿它做一件事static_assert(std::is_same_vT, int)——檢查類型是不是某個具體類型。這當然沒問題但你要是只會這么用等于手里有臺打印機卻只用來打hello world。2.1 基礎(chǔ)斷言組合類型謂詞別只會is_same模板調(diào)試時最常問的問題是T到底是什么、T能不能做這件事。C標準庫提供了大量類型萃取你要學(xué)會把它們組合起來形成一句有意義的話。#include type_traits #include string template typename T class Storage { static_assert(std::is_nothrow_move_constructible_vT, Storage requires a nothrow-move-constructible type); public: // ... }; // 使用 Storagestd::string a; // OKstd::string 滿足要求 static_assert(!std::is_same_vint, std::string, int and std::string should be different); // 明確的靜態(tài)斷言這種寫法的好處是斷言信息直接寫成了人話Storage requires a nothrow-move-constructible type。當使用者傳入一個僅支持拷貝構(gòu)造、移動構(gòu)造會拋異常的類型時編譯錯誤里會有這句話比在一堆static_assert failed的原始表達里找原因舒服得多。2.2 體檢型斷言在關(guān)鍵實例化位置栽樁模板庫里的模板函數(shù)和模板類定義和實例化點往往相隔甚遠。你想知道某次實例化時某個類型長什么樣最直接的辦法是在目標位置臨時加一個必然失敗的靜態(tài)斷言讓編譯器把類型信息顯示出來。這里有個關(guān)鍵工具就是always_false這個慣用法#include type_traits template typename... struct always_false : std::false_type {}; template typename T void inspect() { // 只要實例化到這一行就一定觸發(fā)編譯錯誤并且打印出 T 的實際類型 static_assert(always_falseT::value, Inspect point: see T below); } int main() { inspectint(); // error: static assertion failed: Inspect point: see T below // note: in instantiation of function template specialization inspectint requested here }為什么不能直接寫static_assert(false, ...)因為非模板的static_assert(false)在模板定義階段就會被編譯器拒絕不管這個模板有沒有被實例化都會報錯。而always_falseT是一個依賴模板參數(shù)的類型只有當你真正inspectint()的那一刻always_falseint才會被實例化靜態(tài)斷言才會觸發(fā)。這就實現(xiàn)了栽樁——你把它放在模板的哪個函數(shù)哪個位置它就只在那一次實例化時爆炸把當時的類型信息帶出來。2.3 失配類型的驗尸報告always_false適合顯示當前函數(shù)上下文里的類型。但有時候你只是在某個表達式旁邊想確認decltype(expr)到底是什么手里又沒有現(xiàn)成的模板函數(shù)可改這時候可以用前向聲明技巧逼編譯器寫驗尸報告template typename struct debug_type; // 只聲明不定義 template typename T void f(T x) { // 故意對不完整類型取 ::value觸發(fā)實例化失敗 static_assert(debug_typedecltype(x)::value, Type of x is shown in the error); }當編譯器試圖實例化debug_typeint時發(fā)現(xiàn)它是未定義的不完整類型于是報錯error: implicit instantiation of undefined template debug_typeintint就被打印出來了。如果表達式更復(fù)雜比如decltype(std::declvalT() 1)報錯信息里會直接顯示這個表達式推導(dǎo)出的完整類型。我在排查復(fù)雜的表達式模板、auto返回類型推導(dǎo)問題時這一招幾乎是必用的。2.4 二段式斷言先檢查條件本身再檢查結(jié)果還有一種我特別常用的靜態(tài)斷言用法是針對約束條件的驗證。比如你在寫一個類型萃取想確認T可以被另一個類型U構(gòu)造template typename T, typename U void construct_from(const U u) { static_assert(std::is_constructible_vT, U, T is not constructible from U); // ... }這種斷言如果失敗編譯器會告訴你T和U分別是什么你一眼能看出不匹配在哪。但更麻煩的情況是——你調(diào)用了某個模板函數(shù)它內(nèi)部有一堆這樣的斷言結(jié)果失敗了你卻不知道是哪一個約束沒滿足。這時候我習(xí)慣在調(diào)用點附近先加一層前置斷言來縮小范圍static_assert(std::is_constructible_vMyType, ArgType, Call site: MyType cannot be built from ArgType); construct_fromMyType(arg);這相當于把失敗原因從模板內(nèi)部撈到了調(diào)用點自己身上排查范圍一下就縮小了。我踩過不少次這種坑模板庫里十幾個約束調(diào)用失敗后得翻半天才知道是哪一條沒滿足。在調(diào)用點加一句前置斷言就是給排查裝了個縮小鏡。3. 一樁真實排查多文件里出現(xiàn)的類模板名稱不能重復(fù)是怎么回事靜態(tài)斷言解決的是模板實例化后的類型對不對這一類問題。但模板調(diào)試還有另一大類——模板定義層面出了問題。比如編譯器直接告訴你類模板名稱不能重復(fù)這屬于典型的定義污染或者合并沖突。我拿一個真實項目里遇到的案例完整走一遍排查鏈路。3.1 報錯現(xiàn)場還原當時是一個用CMake組織的中型C項目編譯某個大型翻譯單元時突然冒出一行error: redefinition of templateclass T class Registry緊接著是同文件的另幾行note: previous definition of templateclass T class Registry was here我第一反應(yīng)是同一個頭文件被include了兩次而include guard失效了。但仔細一看報錯的兩個位置距離非常遠一個在registry.hpp另一個在legacy_registry.hpp。兩個文件里各自定義了一個同名同簽名的template typename T class Registry并且被同一個翻譯單元同時包含自然撞車。3.2 排查鏈路先做減法再追沖突源這個問題的正確排查順序不是先去改模板內(nèi)容而是搞清楚這兩個文件為什么同時出現(xiàn)在編譯單元里。我的做法是第一步用預(yù)處理命令把單個翻譯單元展開看這兩個模板到底是從哪些路徑被拉進來的g -stdc20 -E src/main.cpp | grep -n class Registry | head -50預(yù)處理輸出會直接列出所有頭文件展開后的內(nèi)容??摧敵隼颿lass Registry前后的#line指令能快速定位它們分別來自哪個文件、被誰include。這一步基本能確認不是同一個文件被重復(fù)包含而是兩個不同文件在同一個作用域分別定義。第二步追include關(guān)系??磎ain.cpp的#include列表發(fā)現(xiàn)它間接包含了core/registry.hpp和legacy/registry.hpp而這兩條路徑最終都匯聚到core/Engine.hpp——legacy/registry.hpp是某個舊模塊的遺留物被另一個公共頭文件順手帶出來沒人注意到它。第三步檢查命名空間。發(fā)現(xiàn)兩個模板都聲明在全局命名空間里沒有任何namespace包裹。這種兩個同名模板在全局作用域撞車的情況在項目規(guī)模變大后非常容易發(fā)生尤其是從不同子模塊合并代碼時命名習(xí)慣不統(tǒng)一就會中招。3.3 修復(fù)與預(yù)防我當時沒有直接改legacy_registry.hpp里的模板名——因為這個舊模板還有不少調(diào)用點全局替換風(fēng)險太大。而是給新模板加了命名空間把Registry放進core::同時用using core::Registry;在公共頭文件里做顯式導(dǎo)出。這樣舊代碼繼續(xù)用Registry新代碼可以用core::Registry兩套定義不再沖突。預(yù)防方面我在CI腳本里加了一條編譯期掃描grep -rn ^template.*class Registry src/出現(xiàn)跨文件重復(fù)定義時發(fā)警告。更根本的措施是規(guī)定新增模板一律進入命名空間禁止在全局作用域定義類模板。踩過這次坑之后我的體會是**類模板名稱不能重復(fù)這類報錯本質(zhì)是項目管理問題不是模板語法問題。**排查時不要盯著模板定義本身看半天先問為什么同一個作用域里會有兩份定義。用預(yù)處理展開定位include來源、用git log追溯模板的引入時間比在編輯器里反復(fù)看代碼有效得多。4. 遞歸模板失控編譯期死循環(huán)的定位與止損如果說類模板名稱不能重復(fù)是模板調(diào)試里的項目管線問題那么遞歸模板失控就是更純粹的元編程問題。寫遞歸模板的時候終止條件稍有疏忽編譯器就會陷入無限展開但它不會一直跑下去——它會達到遞歸深度上限后給你一屏報錯。4.1 基礎(chǔ)癥狀深度上限與實例化回溯看一個典型的錯誤template size_t N struct Loop { static constexpr size_t value LoopN 1::value; }; // 實例化觸發(fā) constexpr size_t v Loop0::value;用GCC編譯會得到error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth to increase the maximum)用Clang編譯會得到error: recursive template instantiation exceeded maximum depth of 1024這其實是編譯器的止損機制在起作用。模板遞歸沒有真正無限運行它有深度上限到了上限就主動報錯退出。但是如果遞歸邏輯本身特別深比如遞歸鏈長達幾千層或者終止條件在很深層才生效那么你看到的回溯信息會非常長長到關(guān)鍵的起點被淹沒在內(nèi)存里。4.2 定位方法把終止條件檢查提前到每一層肉眼盯著回溯找哪一層斷了效率太低。我的做法是在遞歸模板的每一層都加一個靜態(tài)斷言讓編譯器在斷鏈點當場爆出來而不是一路遞歸到深度上限才報錯。比如寫階乘模板最常見的失誤是特化寫錯或者沒寫template size_t N struct Factorial { // 在每次遞歸前檢查N 不能為 0如果為 0 說明終止特化沒有覆蓋到 static_assert(N 0, Factorial recursion reached 0 without a specialization); static constexpr size_t value N * FactorialN - 1::value; }; template struct Factorial1 { static constexpr size_t value 1; };如果哪天有人誤寫了Factorial1的特化卻忘了寫Factorial0那么實例化Factorial0時第一個靜態(tài)斷言會立刻觸發(fā)報錯信息直接顯示static assertion failed: Factorial recursion reached 0 without a specialization。你不需要去翻幾百層回溯一眼就知道問題出在終止條件缺了0這一層。4.3 定位技巧二分法縮小初始參數(shù)有時候遞歸模板沒有明顯的斷鏈點而是某個參數(shù)計算路徑錯誤導(dǎo)致遞歸鏈非常長且慢慢偏離預(yù)期。比如類型列表展開某個參數(shù)包解包錯誤導(dǎo)致N的遞減失效每次每層N都是同一個值最終撞上深度上限。這種情況下我習(xí)慣用二分法來縮小排查范圍。假設(shè)正常應(yīng)該N100終止現(xiàn)在報錯說深度上限1024那我會臨時把初始值改成N500編譯一次如果也爆改成N250如果沒爆改成N375……通過調(diào)整初始N值找到開始爆炸的臨界點再對照代碼里的終止條件一般能很快定位到是哪一步遞推沒有改變遞歸參數(shù)。這種方法本質(zhì)上是把編譯期當成了一個可控實驗臺——你不必一次猜中而是通過修改實驗參數(shù)觀察編譯結(jié)果來逼近真相。4.4 止損技巧臨時注釋大段實例化請求在大項目里遇到遞歸模板失控還有一個實用技巧注釋掉與當前調(diào)試無關(guān)的模板實例化請求單獨構(gòu)造一個最小測試文件。比如你的大項目里同時實例化了十幾個不同類型的遞歸模板報錯信息混在一起完全沒法看那就新建一個min_test.cpp只保留一個出問題的實例化用單獨的編譯命令跑。g -stdc20 -fsyntax-only min_test.cpp為什么這么干因為編譯器在飛快的報錯輸出里每條error的上下文可能被之前的幾百條note淹沒單獨跑最小測試能大大降低信息噪度。我在處理模板庫崩潰類問題時幾乎總是先在最小文件里復(fù)現(xiàn)再回到大項目里逐步放開。這是一個能救命的習(xí)慣。5. 給編譯錯誤配一套人話翻譯器類型改名、截斷與別名輸出前面講的所有調(diào)試手段最后都繞不開一個問題報錯信息里類型名太長長到人類肉眼根本不想讀。尤其是STL容器嵌套、迭代器、函數(shù)對象這些類型一個std::unordered_mapstd::string, std::vectorstd::functionvoid(int)就能刷掉一整行。長類型名不是在增加信息量而是在消耗你的耐心。5.1 用別名折疊類型鏈在庫代碼內(nèi)部不要吝嗇使用using別名。一個常用的習(xí)慣是給模板庫的外部接口定義短別名讓報錯信息里的核心類型變短template typename T using Vec std::vectorT; template typename Key, typename Value using Table std::unordered_mapKey, Value; template typename T using Handler std::functionvoid(T);這樣出錯時報錯信息里出現(xiàn)的就不再是std::vectorstd::functionvoid(int) 這種三層嵌套而是VecHandlerint。雖然最后還是有一層包裹但可讀性提升是質(zhì)變的。我實測過一個長度接近100字符的STL類型鏈加別名后變成20個字符左右排查速度提升不止一倍。5.2 讓報錯信息帶標題針對某些復(fù)雜的實例化鏈我還會用診斷填充的技巧在關(guān)鍵模板位置插入一段帶大量換行和標記的靜態(tài)斷言讓報錯信息在IDE的輸出窗口里形成視覺分界線方便肉眼快速定位。template int struct debug_mark { static_assert(std::is_same_vint, char, \n\n\n 調(diào)試分界線到這里檢查類型 \n\n\n); };當然這個技巧只適合臨時調(diào)試用提交代碼前要刪掉。但它的價值是實實在在的當你面對一屏幾百行報錯時一個帶大標題的斷言就像是在垃圾堆里插了一面旗子一眼就能看到。5.3 用type_name翻譯器打印推導(dǎo)類型另一個我強烈推薦的小工具是運行時type_nameT()函數(shù)。它在運行期打印出模板實參的實際類型名對排查重載決議、模板推導(dǎo)歧義特別有用而且實現(xiàn)起來不復(fù)雜#include string_view template typename T constexpr std::string_view type_name() { #if defined(__clang__) std::string_view name __PRETTY_FUNCTION__; name.remove_prefix(name.find(T ) 4); name.remove_suffix(name.size() - name.find(;)); #elif defined(__GNUC__) std::string_view name __PRETTY_FUNCTION__; name.remove_prefix(name.find(T ) 4); name.remove_suffix(name.size() - name.find(;)); #elif defined(_MSC_VER) std::string_view name __FUNCSIG__; name.remove_prefix(name.find(T ) 4); name.remove_suffix(name.size() - name.find(;)); #endif return name; }不同編譯器下__PRETTY_FUNCTION__的輸出格式有差異這個函數(shù)需要根據(jù)你用的編譯器做微調(diào)。我一般會在寫模板庫時順手放進一個公共頭文件里調(diào)試時直接std::cout type_namedecltype(x)() std::endl;非常方便。5.4 用候選模板清單輔助排查重載失敗當函數(shù)模板因為SFINAE被排除導(dǎo)致no matching function時編譯器往往只會給你一句冷冰冰的候選函數(shù)不可用卻不告訴你每個候選到底哪里不匹配。這時候有一個實用技巧給每個候選模板加一個帶always_false的輔助斷言把候選模板列出到報錯信息里。template typename T void process(T) { static_assert(always_falseT::value, Candidate 1: generic process called. T see below); } template typename T void process(std::vectorT) { static_assert(always_falseT::value, Candidate 2: vector process called. T see below); }當重載決議選錯分支時你會看到哪一版被調(diào)用、實際的T是什么。這比單純看no matching function有用得多因為它直接告訴你編譯器最終選了誰以及為什么是它。6. 編譯器選項、規(guī)范約束與標準庫差異進階調(diào)試支援模板調(diào)試不只是寫代碼層面的技巧編譯器本身也提供了一些影響調(diào)試體驗的選項以及不同標準庫實現(xiàn)帶來的差異這些都可以在你排查時派上用場。6.1 幾個常用的編譯選項對比GCC: -fmax-errorsN 最多顯示N個錯誤防止刷屏 -ftemplate-backtrace-limitN 限制模板實例化回溯深度默認10 -ftemplate-depthN 提高模板遞歸深度上限 Clang: -ferror-limitN 最多顯示N個錯誤 -ftemplate-backtrace-limitN 控制模板實例化回溯深度顯示 -fdiagnostics-show-template-tree 以樹狀結(jié)構(gòu)顯示復(fù)雜模板參數(shù)我實際使用中最常用的組合是先把-fmax-errors或-ferror-limit設(shè)為1強制自己只看第一條錯誤在需要觀察遞歸模板回溯時把-ftemplate-backtrace-limit調(diào)大讓編譯器完整打印實例化鏈在項目編譯速度允許的情況下偶爾用-fdiagnostics-show-template-tree看看復(fù)雜模板參數(shù)是怎么嵌套的。6.2 C20約束比SFINAE的報錯友好在哪里C20的requires和概念concept出來后模板約束的報錯體驗確實提升了一大截。以前用SFINAE寫約束類型不滿足條件時報錯信息常常指向一串enable_if的深層展開完全沒人能讀懂。有了概念編譯器會直接告訴你約束失敗類型T不滿足ConceptName所要求的一組表達式。但要注意一點概念本身如果寫得不好報錯照樣讓人頭大。比如概念里塞了一長串復(fù)雜要求失敗時編譯器打印because ... does not satisfy ...但那個...如果是一長串嵌套表達式讀起來還是要命。所以自定義概念時盡量拆成多個小概念再組合這樣報錯能精確定位到具體哪個子約束失敗template typename T concept CanAdd requires(T a, T b) { a b; }; template typename T concept CanMultiply requires(T a, T b) { a * b; }; template typename T concept Arithmetic CanAddT CanMultiplyT;這樣如果某個類型只支持加法不支持乘法報錯會明確說它不滿足CanMultiply而不是籠統(tǒng)地不滿足Arithmetic。6.3 libstdc和libc的報錯差異同樣一份包含STL模板的代碼用GCC默認libstdc和Clang配libc編譯報錯信息的可讀性會有明顯差別。libstdc的報錯信息里大量使用std::__cxx11::這種內(nèi)部命名空間前綴類型名極長libc用的是std::__1::前綴長度稍短但也沒有本質(zhì)性改善。真正的差異在于libstdc的某些模板實現(xiàn)更依賴內(nèi)部輔助類型導(dǎo)致報錯鏈更深。我在調(diào)試復(fù)雜STL嵌套代碼時有時會故意切換標準庫實現(xiàn)來看同一個錯誤的兩種呈現(xiàn)方式。比如一個std::bind綁定參數(shù)類型錯誤GCC可能會報出三層lambda/function_helper類型libc可能兩層就能說完。這不是標準庫誰好誰壞的問題而是換一個視角看同一個bug往往有意想不到的收獲。7. 幾條保命經(jīng)驗關(guān)于編譯期調(diào)試的邊界寫到這里我把自己這些年跟模板編譯期調(diào)試打交道積累下來的幾條經(jīng)驗總結(jié)一下。這些不是教科書上的理論是實實在在踩過坑之后留下的條件反射。**一次只追一條報錯。**模板報錯連鎖反應(yīng)極其嚴重一條根因能衍生出幾十條看似不同的錯誤。我給自己定的規(guī)矩是-fmax-errors1強制只看第一條。修完以后重新編譯如果還有錯大概率是下一個獨立問題如果第一條修好了后面全好說明就是連鎖反應(yīng)。**最小復(fù)現(xiàn)優(yōu)于在大項目里硬搜。**不管遇到多么詭異的模板編譯問題我都會先嘗試在一個幾十行的新文件里復(fù)現(xiàn)。復(fù)現(xiàn)不了說明問題跟項目結(jié)構(gòu)、include順序、宏定義有關(guān)復(fù)現(xiàn)得了調(diào)試空間一下就從整個項目縮小到一個文件。這個習(xí)慣幫我排掉了至少一半的疑難雜癥。**修改模板后一定要清理舊構(gòu)建產(chǎn)物。**增量編譯是模板調(diào)試的隱形殺手。模板實例化的結(jié)果會被緩存在目標文件和預(yù)編譯頭里你改了一個模板定義但某些翻譯單元可能還在用舊的實例化結(jié)果。我在一個項目里遇到過明明改了模板卻編譯不出對應(yīng)錯誤的怪事折騰半天發(fā)現(xiàn)是CMake增量構(gòu)建把某個.cpp當成沒變化給跳過了。遇到行為不一致時先clean再編譯永遠是最快的排查手段。**善用預(yù)編譯頭的風(fēng)險意識。**項目開了PCH預(yù)編譯頭之后模板報錯的位置可能被拉得更遠因為公共模板都被塞進了PCH編譯器在報錯時會更容易迷失在大量早已展開的模板實例化記錄里。遇到模板報錯特別難定位時我偶爾會臨時關(guān)掉PCH編譯一次看報錯是否更清晰。這個方法不總能奏效但值得一試。**別把編譯期調(diào)試拖到深夜。**這聽起來像玩笑但我認真說模板報錯需要極強的耐心和注意力狀態(tài)稍微不好就容易在一個無關(guān)緊要的細節(jié)上繞幾個小時。實在憋不出來就睡一覺第二天再回來經(jīng)常十分鐘就看出問題在哪。這不是玄學(xué)是切換思維模式帶來的效率提升。**保存報錯快照。**調(diào)試模板問題時每改一次代碼編譯器輸出就可能完全變樣。我習(xí)慣把關(guān)鍵報錯完整復(fù)制到臨時文件里留底然后對照修改前后報錯的差異來理解編譯器行為。這比靠記憶判斷上次報的是什么可靠多了。**認識邊界。**同樣一個模板代碼有人用Clang編譯通過有人用GCC編譯報錯或者反過來這不是編譯器的錯是代碼可移植性存在問題。模板調(diào)試的終極目標不是讓某一種編譯器閉嘴而是讓代碼在不同編譯器和標準庫下的行為都可預(yù)測。編譯期調(diào)試的終點是你對模板的實例化過程有了足夠清晰的把握能把運行時才發(fā)現(xiàn)的問題提前成編譯期就被抓住。模板編譯期調(diào)試確實有門檻但它不是玄學(xué)。理解編譯器報錯的結(jié)構(gòu)、會用靜態(tài)斷言設(shè)計實驗、掌握定位遞歸失控的方法、懂得給類型名做翻譯這幾件事做到位面對絕大多數(shù)模板報錯你都能有條不紊地拆解。希望這篇經(jīng)驗對你有用少走點我當年走過的彎路。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
一二三四视频中文字幕在线看| 伦伦成年午夜免费视频| 青青草日本中文字幕| 思思热久久成人| 亚洲综合在线第一页| 久久久久久久国产| 少妇人妻无码| 欧美 亚洲 制服 精品| 伊人久久在线视频观看| 久操频道免费在线呗看| 吉川爱美亚洲二区在线| av情色影音| 久久久精品成人国产| 91爱| 久久久精品九| 91丝袜熟女| 久久久久人妻| 97av在线视频| 亚欧高清在线| 亚洲欧美日韩精品久| 亚洲欧美综合网| 欧美熟女妇同| 国产又大又粗又长视频在线| 射丝袜高跟鞋99| 91婷婷| 国产成人免费观看在线视频| 黑人狂躁日本妞一区二区三区| 久久久久亚洲Aⅴ无码| 国产在线视频午夜精华在| 9.1小视频| 日韩在线人妻网站| 欧美久久久| 伊人五月天青青草婷婷| 女同亚洲欧美一二三区久久电影| 久久久久9久久久久| 欧美一区二区亚洲天堂| 精品久久久久,69国产成人精| 国产亚洲日本精品在线| 超碰成人国产| 欧美精品自慰系列寂寞少妇| 黄片直播三级黄片两女一男| 五月丁香激情综合网| 精品无码久久久久久国产浪潮| 欧美高清色| 日本媚薬中文字幕在线| 密臀成人视频久久久| 亚洲吊色| 夜夜骑操视频| 久九九九九九九九热| 欧美高潮| 天天综合~91| 超碰97人人cao| 国产精品久久久啊| 蜜乳成人AV| 亚洲一区日韩精品| 成人三一级一片aaa| 国产精品爱欲| 久久久久9| 一区二区三区精品视频| 国产极品一区二区三区三州| 淫妻综合网| 色婷婷亚洲婷婷| 色五月婷婷麻豆在| 香蕉色网| 男人天堂欧美| 超碰在线观看av不卡| 大香蕉伊人75| 日韩人妻 中文字幕| 亚洲成人一区二区精品| 婷婷伊人綜合中文字幕| 日本999精品视频| 国产精品第二页| 91女优在线观看| 欧美se综合| 亚洲国产精品成人久久蜜臀| 日本3级一区二区免费 | 99无码视频| 69AV女优男人的天堂| av在线人气| 亚洲91大片| 日韩97超碰| 999综合网| 欧在线一二区| 天天视频综合在线观看视频| 国产四虎在线| 九九九网站| 99999re| 亚洲中文字幕熟女| 国产精品亚洲免费| 欧美永久激情一区二区| 激情小说亚洲| 超碰九色| 日韩精品电影| 综合伊人网12色| 91丨九色丨熟女高潮| 97色97好| 欧美 亚洲| 91美女高潮| 丁香九月 婷婷| 日韩激情啪啪啪| 亚洲日韩精品在线播放| 欧美夜夜骑视频| 亚洲综合 欧美| 97国产精品一区二区传媒公司| 欧美日韩*字幕一区| 久久精品人妻一区二区| 99re视频在线播放青草| 亚洲暴力强奸AV| 久久黄黄| 久久精品99| 男插女青青影院| 婷婷91| 神马久久久久久久久久| 国产久久久| 黄色电影观看久久9| av天堂影视中文在字幕在线中文| 天天热精品| 女性喷水高潮在线观看| 激情五月天婷婷| 偷拍欧美激情| 亚瑟国产精品久久无码| 亚洲综合另类欧美久久久| 欧美91网| 67914亚洲精品| 欧美一级二级三级| 亚洲夜夜欢无码一区二区| 久干网| 国产精品一二三区18| 99无码精品| 拍拍拍拍大尺度黄色三级片拍拍拍拍拍照| 激情国产乱伦Av| 99re8超碰| 嗯嗯啊啊操我| 欧美色图下一页| 先锋影音av先锋一区| 青青11操操操操操操操操| 欧洲色综合| 午夜理论片在线观看免费| 在线一区| 职场同事知名国产国产精品久久欧美日韩 | 久久婷婷一区二| 色噜噜人妻av中文字幕| 天天操夜夜操| 国产在线播放成人免费| 国产精品熟女AV中文字幕在线播放| 97超碰香蕉| 夜夜中出国产| 五月丁香六月综合缴清无码| 日韩无码AB| 欧美精品xxxwww| 无卡一区=区| 一级久久久久久久久久久| 欧美高潮| 色妹子A V| 亚洲啪啪综合?v一区综合精品区| 国产60区。| 色翁荡息又大又硬又粗又爽| 美女让帅哥通她小鸡鸡| 久久超碰爱| 国产精品美女久久久久久网站| 啊嗯好大视频在线观看| 国产精品自在自拍视频| 91无码西班牙视频在线| 福利天堂| 骚逼高潮久久精品| 九月丁香婷婷色| daxiangjiao你懂的| 天天日日夜夜| 天天操夜夜嗨| 78精品| 天天看特黄的免费网站| 蜜乳AV网址| 日韩一级二级三级免费看完整版 | 日韩欧美中文字幕搭讪巨乳美人妻视频| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 色九九综合AV| 五月婷婷六月色| 国产强奸乱伦欧美| 97在线亚洲| 蜜臀亚洲中文| 天天舔天天| 国产无码高清操逼视频| 欧美亚洲天天| 亚洲美女 晚间男人天堂| 五月丁香激情综合| 无码人妻精品一区二区中文| 91五十路| 91热| 9精品久久久久| 激情图片亚洲色图| 最新欧洲欧美日本激情网站| 超碰成人最新最好看| 无人区高清电影免费观看一区二区三 www.qmcai2.com | 欧美91视频| 亚洲丝袜在线观看| 九九精品网| 日本东京热大香蕉a片| 麻豆天美国美国产AV| 强奸乱伦资源| 午夜偷拍久久熟女| 无码精品人妻一区二区三区妖精| 999久久久免费精品国产牛牛| 夜夜高潮夜夜爽国产伦精品| 狠狠爱夜夜干| 日韩人妻精品中文字幕| 2019午夜福利视频| 国产精品久久久久久久免牛肉蒲团| 欧美国产日韩清纯唯美| 亚洲 日韩 欧美 国产综合体| 丝袜美腿制服人妻二区中文字幕 | 日韩成人性日韩成人性爱视频在线免费观看 | 色臀AV| 久操网在线| 91色综合激情| 99亚洲人人| 日韩av色图综合| 熟女中出视频| 久久m| 欧美日韩精品国产91| 中文字日本乱码| 97亚洲一区| 99re不伦| 欧美91在线+|+欧美| AV天堂丝袜| 亚洲av夫妻操穴网| 久热久一区二区三区| 国产剧情一区在线观看| 91人人看| 久久久久久久久久久999| 91亚州日韩高清| 日韩97视频!在线| 日本一区99| 午夜毛片高清免费不卡| 午夜久久久| 久久天堂网| 激情在线青青操| 麻豆区久久久久亚| 青青操日韩| 91另类| 亚洲电影中字一区二区| 操高情无码| 久久激情亚洲精品无码?V| 干B| 国产又大又粗又长视频| 国产高清成人免费视频| 天天色,天天干,天天干| 五月激情天| 天天综合网久久ww| 无码人妻毛片丰满熟妇精品区| 午夜视频久久久| 97爱综合| 强奸乱伦中文字幕AV| 欧美视频在线视频免费va| 色牛牛AV| 亚洲 另类 丝袜 自拍 动漫| 成人精品无码| 日韩人妻精品久久久久| 操曰本熟女| 人妻天堂三区| 操高情无码| 91粉嫩萝控精品福利网站_精品影音先锋国| 五月天婷婷基地| 亚洲男人的天堂V| 中文字幕精品久久久久人妻红杏ⅰ| 后入精品| 大香蕉www.超碰| 桃花色涩综合影院| 中文字幕久久精品一区| 91欧美综合| 人人插人人摸人人| 美女淫穴| 先锋激情∨在线视频播放| 日日干日日| 天天性射网| 欧美性爱中文字幕无线码| 蜜臀精品1区2区| 久久婷婷一区| 围产精品一区二区三区视频播放| 亚洲熟久久| 一区二区三区高清天码| 天天享受天天看| 精品少妇999| 日韩午夜啪啪视频| 欧美性性性| 成人综合久久精品色婷婷| 国产第二页| 另类小说综合网| 天天干天天日天天射黄色片| 久久这里只精品免费福利| 偷拍 精品 另类 四区| 久久久久九九九| 91xingse| 国产精品ww久久| 性欧美另类高清| 国产精品久久| 妇女视频网站| 强奸乱伦AV网址| 97日视频| 日韩中文字幕视频在线观看| 欧美美逼| 97超碰美国| 亚洲āv网址在线观看| 夜夜嗨AV蜜臀av| 人人操我人人干| 爱爱动态试试看6 0秒| 秋霞操逼片| 色男人色天堂东京热| 中文字幕亚洲永久精品| 人妻少妇久久| 日韩在线76| www.亚洲成人一区| 91无码人妻| 97任你吞精| 欧美性第1页| 亚洲精品三| 日韩兔费看黄片| 精品国产72| 亚洲成人福利电影免费 | 久草五月| 天天射天天操天天干天天吃2018 | 亚洲AV无码黄色强奸| 婷婷九月丁香| 天天亚洲| 亚洲精品欧洲精品| 天天看,天天做| 九热中文字幕| 精品国产国产AV| 色噜噜人妻丝袜a∨先锋影| 超碰碰97资源站| 国产欧美一区二区| 蜜桃av综合网发布| 欧美v亚洲v综合v国产v妖精| 欧洲亚洲综合| 一区,二区,三区网站| 无码聚合| 人妻献身系列第54部| 欧美情色亚洲| 91挑色欧美| 久久色人体 | 玖玖蜜臀资源网| 夜色AV无码手机在线影院| 亚洲欧美另类图片| 亚洲诱惑天堂| 97亚洲资源| 五月丁香成人网| 欧美性爱日韩性爱| 黄色无码高清黄色无码网站| 18精品一二区| 97操综合| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 99色热| 九九视频黄色片| 熟妇人妻丰满久久久久久久无码| 亚洲黄a三级三级三级看三级| 涩五月婷婷| 啪啪资源网| 97免费在线视频| 人人操人人精品影片| 日本不卡二三区| 亚洲天堂人妻一区二区| 婷婷激情综合网| 精品中文字幕一区二区l - 百度| se吧提供国产乱老熟视频胖女人| 99久久久无码国产精品性啊聊| 桑老女人九区| 尤物视频偷拍免费| 加勒比av官网在线| 欧美国产有色电影| 啊啊啊啊操死我了| 国产日韩欧美| 人妻内射一区二区在线视频| 91成人久久| 日韩精品电影| 亚洲十八禁止| 丝袜色综合| 欧美日韩国产人人| 欧美性Fer办公室秘书| 日本蜜桃| 色偷偷人人玩人人舔人人操人人摸人人爽 | 风月影院男女十八禁| 国产精品欧美激在线| 97色爱| 日韩二三区| 欧亚第一综合网| 欧美精品 - 91爱爱| 伊人国产视频| 中文字幕AV片| 白嫩妹子国产骚| 久久精品噜噜噜成人看免欧美大片| 欧美一区二区三熟女剧情| 一类无码操逼视频| 国产在线精品偷| 亚卅熟女乱色| 欧美另类色图片| 日本天堂网| 少妇69中文| 婷婷15月天青娱乐| 91中文字幕在线观看| 欧美日韩狠狠爱| 麻豆成人影音在线| 天天躁日日躁AAAAXXXX国产 | 久久久久久久九九九九九九| 欧美少妇内射| 久男人久久| 99少妇内射| 熟女探花啪啪| 啪啪AV导航| 97久久视频| 日韩丝袜人妻AV| 嗯嗯,好大,好爽,好骚| 裸体1区| 在线电影亚洲色图| 人妻少妇久久中文字幕一区二区 麻豆 | 日韩精品三级| 日本黄色精品专区网站| 1769精品一区二区三区| 丝袜AV一二三区| 亚洲免费97免费| 欧美日韩亚洲国产中文永久天天看| 操熟女91| 亚洲福利中文字幕在线| 裸模AV女优| 亚洲美腿丝袜香蕉影视欧美成人| 69视频入口| 岛国黄色大片网站| 日韩成人午夜精品久久高潮| 少妇大屁屁| 亚洲天天做日日做天天谢日日| 免费a在线播放v| 91在线免费观看处女| 九九人妻| 欧美大波激情xxxx| 后X久久| 久久风骚城市| 台湾成人无码AV| 91 亚洲 欧洲| 久久久91| 天美麻花大全视频| 91 综合 色| J?P?NESEHD熟女熟妇伦| 120分钟婬片免费看| A男人的天堂| 最新国产精品| 98色网| 亚洲综合草草| 午夜理论片在线观看免费| 涩爱AV在线| 舔足天天操天天射| 久久色情| 亚洲中文丝袜美腿诱惑字幕| 99精品久久久久久久婷婷| 久久曰曰| 亚瑟国产精品久久无码| 久久久久久性爱视频| 午夜精品久久久久久久第一页按摩| 亚一综合久久久久久久久久| 97色色色综合网站| 国产福利电影| 天天天乱色综合全| 伊人一级免费黄片| 久视频在线观看| 91老女人| 日韩AV中文字幕电影| 午夜精品久久99蜜桃的功能章节| www99热| 色欧美在线| 亚洲欧美激情在线视频| 国产又粗又长又大的视频| 国产精品一区二区黄片| 可乐操亚洲蜜911| 午夜男人一级A片7777| 国产一级操B视频| 亚洲视频一二区| 国内精品久久人妻性色av| 美女大乳久久久久久久女人18| 绯色一区二区三区不卡少妇| 亚洲色图a| 在线观看一级α片刺激高潮视频| 操人妻逼91| 国产三级在线现体验区| 久久久禁| 激情综合婷婷| 中文乱码字字幕在线第5页| 男人的天堂2018.| 翔田千里爆乳巨臀无码| 狠综合网| 亚洲精品a人片在线观看视| 久久国产精品视频| 久久熟妇五十路一区| 日韩性爱电影一区| 日欧亚洲二三区大片不卡| 久久精品国产亚洲AV无码做| 欧美激情 一区| 精品一区二区麻豆| 久久是精品| 午夜一区| 亚洲不卡三级手机播放| 国产精品午夜成人福利| 看黄片视频免费| 亚洲丨在线| 9九九九九视频在线观看| 日韩免费a级毛片无码a∨| 国模不卡一本二本三电影| 天天操夜夜嗨| 亚洲男人天堂手机版| 日韩伦理视频| 免费一级毛片在线视频观看| 国产美女高潮| 亚洲国产中文字幕| 肉丝网站91| 熟女色综合久久| 91亚洲欧美| 伊人少妇久久久| 人妻精品综合中文字幕在线| av无码精品久久久久| 爱逼综合| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 7777奇米影视久久| 久久99国产精品| 91/欧美| 操碰97| 嗯啊抽插大香蕉网页| 亚洲精品99999| 九99久久| 蜜桃精品视频一区| 992这里有精品| 天天网综合| 亚洲天堂电影网99999| 国产原创精品| 9久久精品| 影音先锋视频在线| 综合亚洲欧美精品日韩?v| 黑人精品欧美一区二区蜜桃| 美女干逼2| 欧美久久婷| 开心五月婷婷| 天天色播| 亚洲综合图文| av最新免费中文字幕| 素人美腿视频网站| 怡红院亚洲怡春院av| 欧美黄色大片在线观看| 亚洲中文字幕一区| 国产精品大屁股999| WWW.操逼.COM| 综合大香蕉美。| 另类av综合久久| 第四色色综合91| 日韩美一区| julia高潮后不停追击中出| 韩国一级婬片A片AAAAA| 99久久e免费热视| 亚洲性猛| 色婷婷影院| 无色无码| 国模吧 一区二区三区| 在线免费观看高清无码视频| 99色天堂| av网站免费看| 伊人天天久久动态图| 国产三级片在线观看| 啊啊啊啊好疼| 97免费在线观看| 亚洲图片欧美| 国内毛片热久久思思热| 五十路六十路素人熟女| 中文字幕亚洲永久精品| 久久精品国产亚洲AV成人直播| 大伊香蕉在线视频免费| 色噜噜婷婷| 欧美综合自拍成人自拍第二十页| 久操B网| 蜜桃视频精品一区二区三区| 亚州久久9| 久久亚洲色图中文字幕| 9美女超碰在线免费观看| 男女啊啊啊| 久久夜夜| 精品人妻av在线播放| 亚洲强奸乱伦影视网| 99自拍视频在线观看| 长长久久88视频| 亚洲AV资源| 国产精品午夜福利视频| 美女91AV| 一级黄色视频网| 国产热RE99久久6国产精品首| 婷婷色婷婷| 插老姨肥穴| 国产AV线| 综合久久久久久久久91| 粉嫩av在线一区二区| 人人乐大香蕉| 人妻嗯啊啊在线播放| 97在线观看免费| 欧美91久久久久| 亚洲成人ab| 人人干黄色| 亚洲日本韩国在线| 99热综合在线| 蜜臀一二三区| 亚洲欧美高清无码| 97最新在线播放视频| 欧美 中文字幕 一区| 嗯嗯啊啊日韩精品| 青娱乐二区免费| 无码少妇精品一区二区60岁老人| 日韩中文字幕熟妇人妻| 男人成人黄色视频在线观看免费下载| 欧美激情专区| a天堂视频| 久久综合久久综合人久久夜精品| 欧美线天码中字| 成人小说另类在线| 国产 码在线成人网站| 亚洲揄拍网| 天天噜| 久久久九九网站| 绑缚麻绳人妻寝取完整版| 久久精品无码专区| 亚洲高清无码在线桃色| 熟女中出视频| 大学生美女口爆| 色情综合网| 99最新日韩偷拍视频| 三级色综合| 97人人爱人人做人人乐| 九九九热| 男人天堂久久精品不卡| 色色色色日本| 97色涩| 亚洲成人精品在线一区| 97久精品| 免费岛国一级片| 国模限制级电影| 日韩三级av片| 99热成人| 亚洲天堂男人天堂网| 婷婷五月天成人网| 嗯嗯啊啊啊好爽| 午夜免费福利视频一区| 超碰97综合网| 日本 欧美 国产一区| 日韩中文9| 欧美系列在线一区二区| 偷拍色图| 日韩去日本高清在| 91久久国产精品| 91操操| 综合欧美亚洲| 青青草视频爽一爽| 国产精品白丝在线播放| 狠狠热这里都是精品| 欧美综合国产精品久久丁香| 97干天天| 亚洲天堂另类小说男人| 蜜色网色哟哟| 成人毛片免费| 日本啊啊啊啊啊视频| 色久综合| 在线不欧美| 97婷婷色| 色牛aV| 大香伊人在线一区| 乱伦AVxx| 亚洲高清91| 999久久久久久久精| 在线毛片片免费观看| 色网在线| 免费一级视频特黄色大片| 欧美成97爱| 国产免费大片| 亚洲国产尤物yw在线观看| 国产精品动态一区二区三区四四| 99re久久| 日本性爱视频一级| WWW美腿丝袜香蕉中文| 亚洲乱熟女一区二区三区大香蕉| 丰满人妻-区二区三区| 女同性恋一区二区三区精品视频| 久久国产免费激情视频| 在线播放欧洲免费av| 精品少妇一区二区三区免费观看| 精品久久无码午夜福利 | 男人成人黄色视频在线观看免费下载| 三级片网站在线播放| 亚洲色图91| 亚洲综合图片在线| 97久久精品亚洲| 欧美一区二区三区入口| 农村妇女精品一二区| 在线视频五十市| 六月婷婷综合| 欧美日韩另类在线播放| 亚洲图片91| 天天干人妻| 天综合网| 九九无码视频| 新久久AV| 免费在线看黄片av| 色路综合| 精彩久久中文| 色盈盈影院| 久久精彩视频| 亚洲一欧洲中文字幕在线 | 精品久久久久久AV无码| 免费A片三p视频| 久久色一区| 欧美国产欧美在线观看| 狠狠干2020| 亚洲熟女一区| 99久久九九| 亚州乱码中文字幕综合久久久| 人人操人人操人妻人| 嗯嗯,好大,好爽,好骚| 欧美亚州手机在线| 免费看日本操逼视频| 久久久久久日韩| 精品三级在线专区| 久久青青草在线视频| 99在线精品观看视频中文 | 天天色黄色影院天天操| 黑人综合网| 78m成人视线| 麻豆a'v电影| 亚洲欧美日韩电影网站一区 | 五月天春色激情网| 99性爱视频| 91九色首页| 伊人女女资源在线观看| 在线观看色视频| 再深点灬舒服灬太大了添视频| 日韩av在线精品观看| 九七超碰| 欧美不卡五十路| 粉嫩av在线| 91欧美在线| 国产美女高潮| 亚洲欧美国产中文视频| 日韩操啪| 久久久久亚洲av综合波多野制衣| 岛国在线国产| 免费日韩黄片| 久久国产性爱| 日韩午夜精品一区二区三区电影| 韩国黄片aaaa| 亚洲国产精品乱码在线观看| 人人妻人人爱人人玩| 天天做天天爱| 国产自制av蜜乳| 日韩免费中文字幕视频| 韩日色费| 日韩亚洲精品一区二区| 久久久久久国产无码精品| 亚洲欧洲日韩国产自在线| 亚洲综合一区二区| 99热在线播放| 久9久| 大香蕉欧美国产日韩高潮| 中文字幕久久亚州无码| 插插综合网天天影视网| 婷婷爽人人婷婷爽视频| 国产精品久久久久久亚洲色欲| 欧美偷拍区| 蜜臀操逼黄色视频操的好爽| 国产亚洲99久久精品| 97网址www| 91欧美另类| 中文字幕免费在线观看| 三久久久四久久久久| 在线播放成人高清免费视频| 亚洲中文字幕久久人妻| 99碰碰| 亚洲网自拍| 九九九草| 东北女人无套内谢视频| 奇米狠999| 蜜桃臀av在线观看| 天天天天做夜夜夜夜做| julia国产在线 | 97WW精品| 国产第二页| 激情欧美97| 18禁中文字幕| 日本高清电影欧美色图| 综合色拍| 欧美不在线| 一区二区三区 日韩欧美| 91爱综合| 偷拍99| 影视综合无码少妇| 大胆91| 欧美人妻另类在线| 精品人妻一二三| 自慰白浆在线观看| 啊啊啊啊啊啊好湿好爽视频| 亚洲天天自拍| 999亚洲国产视频| 1956日韩精品| 一区二区无码视频| 国产成人无码啪| 天天干天天操天天拍| 亚洲熟女少妇免费视频| 无遮挡一级毛片视频免费的| 男人的天堂2019AV| 久热网| 中文字幕一区二区韩| 宅男午夜在线视频| 天天综合~91| 91精品91久久久中77777| 狠狠躁天天躁日日躁97| 亚洲国产精品无码AV久久久| 中文字幕高清20页视频| 亚洲第2页| 九一屌逼| 国产性爱强奸乱伦大全| 99超级碰免费视频| 久久久久幕乱码| 亚洲成人无码影院| 久久久专区| 天天狠操| 久久久久ab| 天天做天天爱夜夜爽毛片试看| 五月天激情网图片| 97K超碰在线| 亚洲AV成人在线| 欧美天天影院| 99综合免费视频| 神马久久免费电影观看| 免费a在线播放v| 熟女91网| 无码自拍SM| 亚洲天在线| www.99在线| 亚洲男人在线观看天堂| 思思热在线观看| 天天干18禁| 久久婷婷一区二| 91网站18| 日本 免费 一区二区三区 久久香蕉 | 亚洲 欧美 色图| 丁香色婷婷| 91精品人妻| 天天看天天综合成人网| 日韩欧美性吧婷婷乱伦大香蕉| 久久手机视直播| 无码137片内射在线影院| 国产精品欧美激在线| 熟女五十路一区二区三| 色欧洲97| 玖玖婷婷五月天| 日韩无限资源| 天天综合欧美综合| 欧美一区二区三区另类精品| 97操综合| 夜夜操二区| 免费看黄片现成| 夜精品久无码| 亚洲AV成人无码一区二区三区在线观看 | 欧美性爱一区二区三区| 91亚洲黑人| 色黄污美女啪啪啪免费网站| 物业黑人 AV一区| 激情视频网址| 日本东京热久久久电影| 久久久久密臀视频| 色婷婷电影网| 女人与公拘交酡2020视频| 98福利在线视频| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 久草精品国产99| 欧美影音在线| 99久re热视频精品98| 亚洲男人电影天堂| 亚洲综合图片在线| 欧美色五月| 国产精品永久免费10000| 四虎影视国产精品| 亚洲码和欧洲精品激情系列| 国产 无码 一区二区| 偷拍视频青青草在线视频| 91视频成人福利网站在线一区| 欧日a| 富女玩鸭子一级毛片| 免看60秒涩涩视频| 熟妇最新先锋一二三区| 日本色色的视频| 亚洲美女av无码| 蜜臀久久99'精品久久久| www鬼畜国产男人的天堂| 大色综合网| 日B操| 日本二三四区| 精品国产久久乱码| 91人妻丝袜无码| 91啪啪视频| 亚洲欧洲精品视频发布| 日韩欧美亚洲自拍偷拍| 国产精品久久久午夜夜伦鲁鲁| 久久偷拍人| 视频二区美腿丝袜制服人妻欧美| 久久亚洲AV成人精品无码| 日韩电影在线观看网址| 国产久久天堂资源| 懂色av中文字幕一区二区三区天美| 青青草日逼视频| 97人人干| 国产日韩欧美三级片| 亚洲免费成人在线高清无码视频| 中文乱码字幕观看视频| 97伦乱| 国产 大胆 对白| 免费看污网站| 私色综合网| 啪啪91| 日本午夜久久电影| 91强热人妻| 欧美国产欧美在线观看| 一区二区三区免费视频入口| 夜色91| 美欧色综合| 国产农村妇女毛片精品久久| 呻吟 欧美 日本 中出| 精品无码人妻一区二区免费蜜桃| 亚洲综合影视| 色老汉色| 欧美久久久15P| 麻豆精品A片免费观看| 日韩伦理久 久久 清纯| 中文字幕一区二区三区人妻少妇在线| 久久精品一区二区三区不卡| 丰满人妻一区二区三区| 色99在线| 精品久久久无码| 91男女啊啊啊| 香蕉一区二区三区在线视频| 久草在线| 精品九九九九| 亚洲午夜未满十八勿入网站日本又色又爽又黄 | 亚洲综合春色| 亚洲日本加勒比在线| 色穴精品| 97这里都是精品| 艳尻美人妻| 亚熟hd视频在线| 亚州欧美综合| 五月天久久人妻| 97天天日| CCYY草草影院地址入口| 天天躁日日躁成人字幕aⅴ| 色色网91| 福利在线观看一区二区| 国产又色又爽又舒服的三级视频| 99ri视频| 江都AV在线| 人妻人人澡人人爽人人| 亚洲电影91| 青青草依人大香蕉| 日本一区二区三区四区五区六区七区八区九区| 超碰97丝袜| 国产真乱mangent| 精品人体无圣光凹凸| 怡红院一区二区熟女人妻| 天天爽天天| 性色高清在线| 中文在线视频| 久夜视频| 天天色天天干天天爱| av凤凰久久久| 亚洲欧洲小说图片视频 | 88xx成人精品视频| 91人妻中文| 色婷婷五月天| 亚洲限制级| 夜夜夜夜久久久久| 国内毛片热久久思思热| 最新日产中文在线麻豆| 97超碰jingpin| 日韩不卡网操逼中文字幕日韩| 清纯唯美综合亚洲| 蜜乳中文字幕a在线| 久久精品国产亚洲AV无码电影| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 久久久久久91香蕉国产| 久久人妻一区二区三区高清 | 精品无码少妇| 天天影视射综合网| 国产人妻久久精品一区二区三区| 国产呦精品系列在线观看| www.久久最新地址| 超碰调教97| 精品无码秘 人妻一区二区| 天天综合中文字幕 91| 中文字幕蜜乳av| 色婷婷电影| 亚洲色图 图片| 国模私拍一区二区三区神乳| 五月激情影院| 久久人妻无码毛片A片麻豆| 正在播放国产精品一区| 国产精品麻豆成人AV艾秋| 欧美丰满熟妇XXXX性ppX人交| 久久9亚洲| 国产suv精品一区| 高清国产性猛交xxxx乱大交| 国模一区二区三区| 91网站18+| 日韩欧美操逼xxx| 亚洲另类综合欧美| 欧美日韩97在线| 18禁无码永久免费无限制| 九九成人| 亚洲欧美内射| 天天日天天射天天干| 日本一线产区和二线产区伦理片| 国产精品欧美日韩久久| 一区黄二区黄| 亚洲黄色| 亚洲成人免费在线| 久久久久无码一妻区| 国产精品一区二区久久精品| 粉嫩国产精品久久粉嫩| 亚洲中文sv| 欧美久久伊人| 色哟哟av网址| 久久人人爽爽人人爽人人片αV| 99精品丰满人妻无| 一区二区三区视频| 天堂蜜桃无码视频一区二区| 人妻熟妇一区二区三区| 中国一区二区亚洲人妻| 亚欧美综合网。| 亚洲伊人a线观看视频| 97超碰逼| 免费日韩黄片| 欧美72网页| 男女激烈网站最新| 欧美日韩婷婷中文| 蜜乳AV.COM| 五月天加勒比啪| 欧美不卡二区| 一区二区亚州激情久婷婷欧美| 日本天天操| 99热18这里只有精品| 操逼不卡中文字幕| 精品一区99999| 亚洲国产成人高清在线| 一区二区播放| 丁香五月影院| 色与欲影视| 67914在线精品观看| 欧美成熟性爱精品| 歐美性天天| 艹比视频国产精品| 91亚洲黄色网| 天天综合91在线| 亚洲欧美国产va在线播放频| 久偷拍| 美女国产一区二区久久 | 男人的天堂午夜av| 一个国产在线综合网站| 亚洲综合有码| 精品国模无码| 成人热久久精品| 在线欧美69V免费观看视频| 人妻激情在线视频| 丁香婷婷大香蕉| 少妇一区二区三区| A啊啊在线观看| 精品在线观看视频在线| 日韩精品-原创伙伴| 涩爱AV在线| 无码免费精品高清| 玖玖久久久| 亚洲 欧美 小说| 国内精品久久久久影院亚洲| 97精品网| 亚洲日韩欧美一区二区| 五月婷婷五月天| 国产精品人人爽人人做可爱福利| 97伦乱| 久久久久久久极品香蕉视频| 中文精品一区二去| 97超碰超| 无码久| 黑操B| 久久精品国产亚洲AV片多多| 91色花堂| 日韩人妻精品| 久久本道| 免费在线观看AV无码网站| 国产高清成人免费视频| 韩国嫰模上门援交视频| 中文伊人大香蕉视频| 国产精品久久久久中文字幕| 东京热99999| 国产欧美日产一区二区三区 - 国产欧美日 | 久9综合在线| 国产黄片在线免费观看| 91爱综合| 国产乱码久久久| 97精品视频免费| 大香樵伊人网| 国产美女mm131爽爽爽爽| 久96热在线观看视频| 蜜臀99久久精品久久久久久| 91爰爱欧美| 久久9亚洲| 色色五月天婷婷| 强奸乱伦av电影| 91伊人久| 欧美一级A一级a爱片久久| 亚洲无吗在线视频| 91啦人妻| 成年人黄色| 有码专区最新中文字幕有码| 九九热精彩视频| 美女的肌被草喷水视频| 亚洲欧洲偷拍一区| 9久久精品| 国产91久久九九免费精品无码| 亚洲成aⅴ人片不卡无码| 日韩一级二级三级免费看完整版| 人人操人人操人妻人| 亚洲欧美91√| 亚洲精品白丝| 国产av热热色| 国产青视频| 欧美一区二区传媒| 日韩精品三区四区| 美女啊啊啊啊pc| 久久午夜伦| 亚洲男人的天堂亚洲| 日本色色色| 婷婷在线视频| 性一交一乱一交A片久久四色| 乱伦日本色图AⅤ| 欧美大香蕉专区网| 国产久久av| 日韩乱伦影音先锋| 日韩在线观看字幕精品| 久久av成人无码免费| 日韩乱伦影音先锋| 久久亚洲AV成人精品无码| 久久性爱网站| 国内自拍 日韩激情 99| 中文字幕 国产区| 开心五月激情网| 成人情色一区二区| 97色冈| 欧洲乱码一区二区| 美女AV一区二区| 东方亚洲在线操逼天堂| 高清不卡 中文 人妻| 亚洲激情欧美色图| 花花AV导航| a片自拍直播视频| 淫乱图区 | 欧美99热| 丁香五月天啪啪|