久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

C++友元、內(nèi)部類、匿名對(duì)象與編譯器優(yōu)化的實(shí)戰(zhàn)解析

C++友元、內(nèi)部類、匿名對(duì)象與編譯器優(yōu)化的實(shí)戰(zhàn)解析 寫C的人大多有這種感覺學(xué)完構(gòu)造函數(shù)、析構(gòu)函數(shù)、繼承和多態(tài)以為自己已經(jīng)掌握了類的全部結(jié)果一碰到友元、內(nèi)部類、匿名對(duì)象這類“邊角料”概念就犯迷糊——面試時(shí)可以背出定義真正寫代碼時(shí)卻不知道什么時(shí)候用、為什么用。更別提“編譯器優(yōu)化”很多人覺得那純粹是編譯器的事跟自己的代碼風(fēng)格毫無關(guān)系。其實(shí)這四個(gè)話題在真實(shí)項(xiàng)目中關(guān)系極為密切友元決定了類與類之間的信任邊界內(nèi)部類決定了類型之間誰是主人誰是仆人匿名對(duì)象的構(gòu)造和析構(gòu)時(shí)機(jī)直接影響程序行為和性能而編譯器優(yōu)化尤其是復(fù)制消除和移動(dòng)語義才是決定“看起來有拷貝”和“實(shí)際上沒拷貝”之間差異的根本原因。這篇文章不搞理論背誦我會(huì)把這四個(gè)概念拆開結(jié)合可運(yùn)行的代碼和分析思路把它們的本質(zhì)、適用場景、以及相互之間的聯(lián)動(dòng)關(guān)系講清楚。適合對(duì)C類有基本了解、想在細(xì)節(jié)和實(shí)戰(zhàn)層面更進(jìn)一步的學(xué)習(xí)者和一線開發(fā)者參考尤其建議準(zhǔn)備面試、或者在實(shí)際項(xiàng)目中反復(fù)糾結(jié)“這里要不要寫friend”“這樣寫會(huì)不會(huì)多構(gòu)造一次”的人仔細(xì)看看。1. 友元為什么存在封裝原則下的一扇設(shè)計(jì)出來的“后門”很多人剛接觸友元時(shí)都會(huì)有一個(gè)天然疑問C不是大力提倡封裝嗎把成員設(shè)置成private就是為了不讓別人亂動(dòng)結(jié)果又冒出個(gè)friend來開后門這不是自相矛盾嗎要回答這個(gè)問題得先理解封裝保護(hù)的不是“數(shù)據(jù)”而是“數(shù)據(jù)的內(nèi)部結(jié)構(gòu)”。1.1 運(yùn)算符重載困境友元背后真正的推動(dòng)力最典型的場景是運(yùn)算符重載。假設(shè)你設(shè)計(jì)了一個(gè)有理數(shù)類#include iostream class Rational { private: int num; // 分子 int den; // 分母 public: Rational(int n 0, int d 1) : num(n), den(d) {} }; Rational operator(const Rational lhs, const Rational rhs) { // 這里想拿到 lhs.num 和 rhs.num但 num 是 private編譯直接失敗 return Rational(lhs.num * rhs.den rhs.num * lhs.den, lhs.den * rhs.den); }想讓重載的加法運(yùn)算符讀取分子分母有兩條路要么把成員都設(shè)成public要么給這個(gè)算子函數(shù)提供公有的getter。前者等于把整個(gè)封裝推倒重來任何外部代碼都能隨意改分母為0后者則把內(nèi)部數(shù)據(jù)暴露給所有調(diào)用者為了一個(gè)操作符放棄整個(gè)防線。友元給出的答案是第三條路單獨(dú)信任這一個(gè)函數(shù)讓它能訪問私有成員其他外部代碼一律不放開。 注意友元本身不是主題真正的主題是“最小授權(quán)”——給任何一個(gè)函數(shù)或類開放私有成員訪問都意味著你在承擔(dān)額外的維護(hù)成本和封裝破壞風(fēng)險(xiǎn)所以授權(quán)面越小越好。把operator聲明為友元后它在語法上是一個(gè)普通全局函數(shù)卻擁有類私有成員的訪問權(quán)。這樣既保留了Rational內(nèi)部的私有性又讓操作符能自然地工作。這里有一個(gè)值得深入的點(diǎn)C雖然沒有像某些語言那樣提供“運(yùn)算符重載”的成員語法強(qiáng)制方案但設(shè)計(jì)者把“左右操作數(shù)對(duì)稱性”作為了核心考量——當(dāng)重載出現(xiàn)在左側(cè)操作數(shù)是本類型時(shí)可以做成成員函數(shù)但像cout rational或5 rational這樣的場景必須是非成員函數(shù)這時(shí)友元幾乎是唯一不破壞封裝的路徑。1.2 三種友元形態(tài)與授權(quán)粒度友元有三種聲明方式授權(quán)粒度完全不同class Device; class Manager { public: void reset(Device d); // 僅重置設(shè)備 }; class Device { private: int status; friend void debug(Device d); // 全局函數(shù)可以訪問 friend class Resetter; // 整個(gè) Resetter 類都可以訪問 friend void Manager::reset(Device d); // 只授權(quán) Manager::reset 這個(gè)成員函數(shù) };友元全局函數(shù)比如debug()、重載的operator最常用授權(quán)面最小推薦優(yōu)先使用。友元類如果你想讓Resetter的所有成員函數(shù)都能訪問Device的私有數(shù)據(jù)用這個(gè)。但它缺點(diǎn)是授權(quán)面太大后續(xù)增加任何成員函數(shù)都會(huì)自動(dòng)獲得訪問權(quán)限。友元成員函數(shù)只對(duì)一個(gè)具體成員函數(shù)授權(quán)粒度最細(xì)。代價(jià)是聲明順序有講究必須先聲明或定義Manager::reset并且Manager的定義要完整可見否則編譯器不認(rèn)識(shí)這個(gè)成員函數(shù)。實(shí)際工程里我維護(hù)過一個(gè)硬件驅(qū)動(dòng)模塊內(nèi)部狀態(tài)機(jī)有大量私有狀態(tài)需要被日志系統(tǒng)讀取當(dāng)時(shí)就是用一個(gè)日志函數(shù)作為友元而沒讓整個(gè)日志類成為友元避免后續(xù)日志類新增任何功能都自動(dòng)摸到硬件內(nèi)部寄存器。這就是經(jīng)驗(yàn)的差距不是能不能用friend而是要控制frontdoor開到多大。1.3 友元的三條規(guī)則不傳遞、不繼承、不回溯友元有三個(gè)容易踩坑的性質(zhì)雖然教科書提過但在實(shí)際項(xiàng)目中特別容易被忽略不傳遞A是B的友元B是C的友元不意味著A是C的友元。每次跨類的私有訪問都需要單獨(dú)建立信任關(guān)系。不繼承如果基類有個(gè)友元函數(shù)它在派生類對(duì)象上無法訪問派生類新增的私有成員。友元關(guān)系不會(huì)隨繼承傳遞下去。不回溯友元可以訪問聲明它的類的私有成員但反過來不行——如果A聲明B為友元A不能因此訪問B的私有成員。這三點(diǎn)看似簡單組合起來卻很容易引發(fā)設(shè)計(jì)問題項(xiàng)目中有人把friend寫在基類里派生類需要同樣訪問時(shí)發(fā)現(xiàn)報(bào)錯(cuò)訪問權(quán)限不足這才知道友元沒有被繼承。遇到這種情況不要試圖繞過而是考慮把那個(gè)需要訪問私有成員的邏輯抽成接口或干脆讓派生類通過受保護(hù)的成員走正常繼承路徑。2. 內(nèi)部類類型嵌套的真正價(jià)值不是“玩法”是邊界控制內(nèi)部類也就是嵌套類在C里一直存在但很多初學(xué)者把它當(dāng)成一種奇怪的噱頭——明明可以拆分出兩個(gè)平級(jí)的類為什么要嵌套在另一個(gè)類里面我的看法是內(nèi)部類是一種作用域和訪問控制雙重工具它最有價(jià)值的地方是“把不想給別人看的類型藏起來”以及“讓相關(guān)聯(lián)的類型從命名上就綁定在一起”。2.1 單向透明的訪問規(guī)則內(nèi)可看外外不可看內(nèi)C11之后內(nèi)部類對(duì)外圍類的私有成員擁有天然訪問權(quán)不需要顯式聲明friend。反之外圍類不能自動(dòng)訪問內(nèi)部類的私有成員。這個(gè)規(guī)則初看有點(diǎn)不對(duì)稱但邏輯是自洽的內(nèi)部類是外圍類的一部分就像公司的內(nèi)部部門能看公司的賬本但公司管理層不會(huì)自動(dòng)知道每個(gè)部門內(nèi)部的日程。class Outer { private: int secret 42; class Inner { public: // Inner 能訪問 Outer 的 private 成員 void print(const Outer o) { std::cout o.secret std::endl; } }; public: Inner getInner() { return Inner(); } }; // 在外部甚至無法提及 Outer::Inner 的類型因?yàn)樗?private 的在這個(gè)例子里Outer::Inner是私有的外面根本看不到這個(gè)類型只能通過外層類的成員函數(shù)獲取Inner對(duì)象。這就是一種強(qiáng)力的實(shí)現(xiàn)隱藏機(jī)制——比把內(nèi)部類放到public里然后靠注釋解釋“別用”干凈得多。有些項(xiàng)目里會(huì)這樣實(shí)現(xiàn)Pimpl模式把實(shí)現(xiàn)類定義成外圍類的private嵌套類頭文件里只有一個(gè)指針。這里有一個(gè)非常關(guān)鍵的區(qū)分點(diǎn)內(nèi)部類并不自動(dòng)持有外層類對(duì)象的指針或引用。C的內(nèi)部類和Java的inner class有本質(zhì)區(qū)別Java內(nèi)部類可以直接調(diào)用外部類實(shí)例的成員因?yàn)樗[式攜帶了一個(gè)outer引用C內(nèi)部類只是一個(gè)類型沒有對(duì)任何具體對(duì)象的隱式綁定。如果想讓內(nèi)部類操作某個(gè)外部對(duì)象必須顯式傳入引用或指針就像上面的print(const Outer o)。2.2 外部類能否訪問內(nèi)部類私有成員能但要走正確的路前面說“外不可看內(nèi)”嚴(yán)格說有一點(diǎn)例外如果外圍類主動(dòng)聲明自己是內(nèi)部類的友元就能訪問內(nèi)部類私有成員。但更常見的做法是通過內(nèi)部類自己的公有成員函數(shù)來協(xié)作。這里還有一種讓人容易混淆的情況內(nèi)部類是否是外圍類的友元不加任何聲明時(shí)C標(biāo)準(zhǔn)規(guī)定內(nèi)部類可以直接訪問外圍類私有成員無需額外聲明但如果你在內(nèi)部類里聲明了外圍類是它的友元外圍類也能訪問它的私有成員。這在設(shè)計(jì)嵌套數(shù)據(jù)結(jié)構(gòu)時(shí)很常見class Container { private: int items 10; class Node { private: int value 0; friend class Container; // 讓外圍類能訪問 Node 的私有成員 }; public: int getNodeValue(const Node n) { return n.value; // 因?yàn)?Container 是 Node 的友元 } };把這兩種訪問規(guī)則放一起可以畫出一個(gè)清晰的分工外層類通過友元關(guān)系進(jìn)入內(nèi)部類的私有區(qū)域內(nèi)部類則天然可以訪問外層類的私有區(qū)域。這種雙向協(xié)作在實(shí)現(xiàn)迭代器、建造者模式、狀態(tài)機(jī)節(jié)點(diǎn)等場景中非常常用。2.3 應(yīng)用場景隱藏實(shí)現(xiàn)細(xì)節(jié)和綁定類型關(guān)系內(nèi)部類最典型的應(yīng)用有兩個(gè)方向第一個(gè)方向是隱藏實(shí)現(xiàn)類型。比如給一個(gè)DatabaseConnection類實(shí)現(xiàn)連接池內(nèi)部需要維護(hù)一個(gè)ConnectionPool::PooledConnection類型來包裝原始連接、空閑標(biāo)記、借用時(shí)間等數(shù)據(jù)。這個(gè)PooledConnection只服務(wù)于連接池內(nèi)部邏輯完全沒有必要暴露給使用方。如果放在全局作用域頭文件里的類型數(shù)量會(huì)膨脹調(diào)用者也容易誤用作為private嵌套類使用方看到DatabaseConnection時(shí)根本不知道里面還藏著這么個(gè)東西。第二個(gè)方向是把強(qiáng)關(guān)聯(lián)類型的命名明確化。想想std::vectorT::iterator、std::mapK,V::value_type這些類型都是作為容器類的內(nèi)部類存在的。它們表示“這個(gè)類型專門服務(wù)于這個(gè)容器”。如果你把迭代器設(shè)計(jì)成全局類至少會(huì)產(chǎn)生兩個(gè)問題一是命名上無法表達(dá)歸屬關(guān)系二是它可能需要訪問容器的私有數(shù)據(jù)就得額外聲明友元而嵌套在這種情況下天然解決了訪問權(quán)限問題。我在實(shí)際代碼里維護(hù)過一個(gè)序列化框架里面有一個(gè)Message::Field內(nèi)部類表示消息中的一個(gè)字段。設(shè)計(jì)時(shí)故意把它設(shè)為private嵌套類框架使用方只能通過Message::addField()拿到它不能憑空構(gòu)造。這個(gè)設(shè)計(jì)讓非法字段態(tài)在編譯期就被杜絕了比任何運(yùn)行期檢查都便宜、可靠。3. 匿名對(duì)象沒有名字的臨時(shí)量生命周期大有講究匿名對(duì)象指通過直接調(diào)用構(gòu)造函數(shù)而沒有賦予任何名字的臨時(shí)對(duì)象比如std::string(hello)、BigData()。這在很多語言里都很自然但在C里它有一個(gè)繞不開的問題這個(gè)對(duì)象什么時(shí)候構(gòu)造、什么時(shí)候析構(gòu)會(huì)在程序行為上留下痕跡。尤其是析構(gòu)時(shí)機(jī)處理不好可能出現(xiàn)“明明執(zhí)行完了東西卻提前銷毀”的bug。3.1 生命周期基準(zhǔn)完整表達(dá)式結(jié)束時(shí)析構(gòu)匿名對(duì)象的生命周期從構(gòu)造開始到它所屬的“完整表達(dá)式”full expression結(jié)束時(shí)結(jié)束。完整表達(dá)式簡單說就是不被其他表達(dá)式包含的那個(gè)最大表達(dá)式通常對(duì)應(yīng)一個(gè)以分號(hào)結(jié)尾的語句。#include iostream struct Probe { Probe() { std::cout construct\n; } ~Probe() { std::cout destroy\n; } }; void take(Probe p) {} int main() { take(Probe()); std::cout after take\n; }這段代碼的輸出順序基本上是construct destroy after take也就是說匿名對(duì)象在傳參的過程中完成構(gòu)造調(diào)用結(jié)束后立即析構(gòu)然后程序才繼續(xù)打印after take。如果把Probe換成管理內(nèi)存、鎖、文件句柄的資源類這個(gè)精確的析構(gòu)時(shí)機(jī)就非常重要——比如在離開完整表達(dá)式后臨時(shí)量銷毀鎖釋放了但你的函數(shù)體還想繼續(xù)用這個(gè)鎖保護(hù)的內(nèi)容那就出問題了。3.2 引用綁定能讓匿名對(duì)象“續(xù)命”把一個(gè)匿名對(duì)象綁定到引用上是延長生命周期最直接的方式const Probe ref Probe(); // 生命周期延長到 ref 的作用域結(jié)束 Probe rref Probe(); // 右值引用綁定同樣延長綁定到const T或者T會(huì)讓臨時(shí)對(duì)象的析構(gòu)延后到引用的生命周期結(jié)束這條規(guī)則是C標(biāo)準(zhǔn)明確規(guī)定的。但有幾處例外特別容易在真實(shí)項(xiàng)目中踩到作為函數(shù)參數(shù)綁定引用時(shí)生命周期只延長到函數(shù)調(diào)用結(jié)束不會(huì)延長到調(diào)用者那邊。數(shù)組引用綁定臨時(shí)對(duì)象不允許不能通過這種做法堆疊生命周期。臨時(shí)對(duì)象的成員被引用綁定時(shí)不會(huì)延長整個(gè)臨時(shí)對(duì)象的生命只是延續(xù)到臨時(shí)對(duì)象本身被銷毀的那一瞬。最后一個(gè)坑我踩過一次有段代碼把匿名對(duì)象的某個(gè)字段的引用返回給了調(diào)用方看起來安全實(shí)際臨時(shí)對(duì)象在函數(shù)返回后就析構(gòu)了引用變成了懸空引用調(diào)試的時(shí)候數(shù)據(jù)時(shí)對(duì)時(shí)錯(cuò)折騰了一天才找到問題。所以日常寫代碼時(shí)別過度依賴引用延長這條保命條款尤其是當(dāng)你的對(duì)象還牽扯到成員引用時(shí)提前用命名對(duì)象更穩(wěn)妥。3.3 匿名對(duì)象在運(yùn)算符重載和鏈?zhǔn)秸{(diào)用中的獨(dú)特價(jià)值匿名對(duì)象最常出現(xiàn)在運(yùn)算符重載和鏈?zhǔn)秸{(diào)用的返回值中。a b c這樣的表達(dá)式a b產(chǎn)生的臨時(shí)對(duì)象會(huì)作為 c的左操作數(shù)然后整個(gè)表達(dá)式結(jié)束時(shí)統(tǒng)一銷毀。假如operator返回引用而不是值就會(huì)返回一個(gè)懸空引用所以重載運(yùn)算符時(shí)“返回值”設(shè)計(jì)必須謹(jǐn)慎能用值傳就用值移動(dòng)語義和編譯器優(yōu)化會(huì)處理多余拷貝。鏈?zhǔn)秸{(diào)用里也很經(jīng)典class Logger { public: Logger add(const std::string msg) { messages.push_back(msg); return *this; } }; Logger L; L.add(a).add(b).add(c);這里每調(diào)用一次add返回的是Logger不會(huì)產(chǎn)生匿名對(duì)象。但如果某個(gè)版本把返回值寫成了Logger那L.add(a)就會(huì)產(chǎn)生一個(gè)匿名Logger下一句add(b)是給臨時(shí)對(duì)象加的L本身只加上了a——這是相當(dāng)隱蔽的bug。排查的時(shí)候如果看到鏈?zhǔn)秸{(diào)用的效果全落在了一個(gè)臨時(shí)量上先檢查返回值是不是寫成了值類型。4. 編譯器優(yōu)化如何改變你寫代碼的方式從拷貝消除到移動(dòng)語義第四個(gè)話題在這里不是為了講編譯器內(nèi)部算法而是為了回答一個(gè)非常實(shí)際的問題你的代碼為什么會(huì)快為什么有時(shí)候“花了拷貝的代價(jià)卻看不到拷貝”。很多人以為C里寫return obj;一定會(huì)觸發(fā)拷貝構(gòu)造于是想盡辦法用指針、引用、輸出參數(shù)來“避免拷貝”結(jié)果寫出的代碼又丑又難維護(hù)。這種慣性思維的形成是因?yàn)樗麄儾恢谰幾g器對(duì)匿名對(duì)象和返回值有一整套優(yōu)化規(guī)則。4.1 RVO/NRVO與復(fù)制消除的底層邏輯RVOReturn Value Optimization表達(dá)的是函數(shù)return A();返回一個(gè)匿名對(duì)象時(shí)編譯器可以讓這個(gè)對(duì)象直接構(gòu)造在調(diào)用者預(yù)期的那個(gè)內(nèi)存位置上而不是先構(gòu)造一個(gè)臨時(shí)對(duì)象、再拷貝/移動(dòng)到目標(biāo)位置。NRVONamed Return Value Optimization則是對(duì)A obj; return obj;這種帶名字的局部對(duì)象做同樣的事。#include iostream struct BigData { BigData() { std::cout construct\n; } BigData(const BigData) { std::cout copy\n; } BigData(BigData) { std::cout move\n; } }; BigData makeData() { return BigData(); // RVO } BigData makeData2() { BigData tmp; return tmp; // NRVO } int main() { auto a makeData(); auto b makeData2(); }在較新的編譯器和默認(rèn)優(yōu)化級(jí)別下這兩次調(diào)用通常只會(huì)各輸出一次construct沒有任何copy或move。這正好回應(yīng)了上一篇討論的匿名對(duì)象生命周期問題匿名對(duì)象雖然概念上是一個(gè)臨時(shí)量但經(jīng)過優(yōu)化后它的構(gòu)造直接發(fā)生在目標(biāo)位置析構(gòu)也發(fā)生在目標(biāo)位置的作用域結(jié)束原本“拷貝到目標(biāo)”的中間步驟被整個(gè)擦掉了程序里根本不存在那個(gè)臨時(shí)的中間體。C17更進(jìn)一步把某些純右值場景的復(fù)制消除變成了語言承諾也就是結(jié)合RVO的返回值構(gòu)造場景編譯器“必須”不產(chǎn)生多余的臨時(shí)對(duì)象拷貝。這意味著你不需要依賴忘掉優(yōu)化級(jí)別的運(yùn)氣語言層面就保證了效率。4.2 寫代碼時(shí)怎樣配合編譯器而不是跟它較勁既然編譯器這么能干那我們是不是可以隨便寫返回值的代碼了不完全是。編譯器優(yōu)化是有條件的它的先決條件是可觀的復(fù)雜狀態(tài)和函數(shù)體可見性。RVO是否生效取決于函數(shù)定義是否在當(dāng)前編譯單元可見、返回路徑是否唯一、對(duì)象構(gòu)造是否可被明確追蹤。以下幾條實(shí)戰(zhàn)建議是我在多年開發(fā)中總結(jié)出來的優(yōu)先返回匿名對(duì)象或直接返回明確構(gòu)造的局部對(duì)象讓編譯器有最大優(yōu)化空間。不要為了“避免拷貝”特意改成輸出參數(shù)?,F(xiàn)代C里std::string foo()這種返回值設(shè)計(jì)是正常且高效的改成void foo(std::string out)反而搬石頭砸腳。如果你確實(shí)需要返回一個(gè)已經(jīng)存在的對(duì)象在無法利用NRVO時(shí)移動(dòng)構(gòu)造會(huì)兜底但前提是目標(biāo)類型正確地實(shí)現(xiàn)了移動(dòng)構(gòu)造并使用了std::move當(dāng)對(duì)象是具名局部變量且需要顯式轉(zhuǎn)義時(shí)。關(guān)注Debug構(gòu)建下的行為差異很多性能問題只在Debug下出現(xiàn)因?yàn)閮?yōu)化被關(guān)閉了拷貝/移動(dòng)會(huì)老老實(shí)實(shí)地執(zhí)行。判斷“這是不是優(yōu)化帶來的假象”和“這是不是真實(shí)的性能熱點(diǎn)”要兩套構(gòu)建都看。4.3 觀察拷貝行為的手段構(gòu)造輸出與優(yōu)化參數(shù)對(duì)比實(shí)際排查時(shí)我會(huì)習(xí)慣性地在關(guān)鍵類的構(gòu)造函數(shù)、拷貝構(gòu)造、移動(dòng)構(gòu)造、析構(gòu)函數(shù)里加上輸出標(biāo)記然后分別用三個(gè)編譯參數(shù)觀察g -stdc17 -fno-elide-constructors test.cpp -o test_noelide g -stdc17 -O2 test.cpp -o test_opt-fno-elide-constructors會(huì)關(guān)閉復(fù)制消除這時(shí)你能看到“如果沒有優(yōu)化代碼會(huì)產(chǎn)生多少拷貝”。對(duì)比一下兩次運(yùn)行的輸出差異就能知道編譯器到底替你省了多少成本。我在優(yōu)化一個(gè)字符串處理模塊時(shí)就用這種方法發(fā)現(xiàn)了一個(gè)隱藏瓶頸某個(gè)函數(shù)返回大字符串時(shí)關(guān)閉優(yōu)化會(huì)多構(gòu)造4次打開優(yōu)化后只剩1次構(gòu)造。之后調(diào)整了那個(gè)函數(shù)的結(jié)構(gòu)讓它更自然地返回匿名對(duì)象優(yōu)化效果比手動(dòng)改傳參方式好得多。這里還要提一嘴移動(dòng)語義和編譯器優(yōu)化的協(xié)同關(guān)系。C11引入移動(dòng)語義之后“拷貝消除”和“移動(dòng)”經(jīng)常被放在一起討論但它們不是一回事復(fù)制消除是從物理上抹掉一次構(gòu)造/拷貝移動(dòng)則是通過轉(zhuǎn)移資源所有權(quán)把成本從深拷貝降低為一次指針或句柄的交接。現(xiàn)代標(biāo)準(zhǔn)庫容器普遍做了移動(dòng)構(gòu)造所以按值返回一個(gè)std::vector在優(yōu)化下幾乎不產(chǎn)生深拷貝成本。反過來如果一個(gè)類型自己管理資源卻沒有正確實(shí)現(xiàn)移動(dòng)構(gòu)造和移動(dòng)賦值那么按值返回它就可能退化為深拷貝再牛的編譯器也沒轍。4.4 匿名對(duì)象與優(yōu)化一起用一件順手但容易忽略的事將匿名對(duì)象和編譯器優(yōu)化組合起來在傳值和返回兩大場景都有實(shí)際收益。傳參時(shí)如果函數(shù)是按值接收直接傳匿名對(duì)象比先創(chuàng)建命名對(duì)象再std::move進(jìn)去更簡潔——編譯器對(duì)純右值直接構(gòu)造進(jìn)參數(shù)位置幾乎總是零成本class Config { public: Config(std::string name, int level); }; void use() { Config cfg(service-a, 3); // 普通命名對(duì)象 Config cfg2(std::string(service-b), 5); // 匿名字符串是臨時(shí)量直接構(gòu)造進(jìn)參數(shù) }第二條看起來沒有刻意減少什么但它省去了一個(gè)局部臨時(shí)變量的構(gòu)造和析構(gòu)痕跡尤其當(dāng)字符串很長時(shí)這能顯著減少臨時(shí)數(shù)據(jù)結(jié)構(gòu)的開銷。實(shí)際項(xiàng)目中我們會(huì)在熱路徑里用匿名對(duì)象構(gòu)造參數(shù)既保持代碼可讀性又把臨時(shí)量控制在最小范圍。不過要提醒一點(diǎn)匿名對(duì)象在“需要復(fù)用同一個(gè)對(duì)象多次場景”下反而吃虧比如循環(huán)體內(nèi)反復(fù)構(gòu)造匿名對(duì)象再丟棄不如在循環(huán)前創(chuàng)建一個(gè)命名對(duì)象多次復(fù)用。5. 組合起來看友元、內(nèi)部類、匿名對(duì)象和優(yōu)化如何在一段代碼里協(xié)同四個(gè)概念分別拆開講是為了理清邏輯但在真實(shí)代碼里它們經(jīng)常同時(shí)出現(xiàn)。比如一個(gè)內(nèi)部類作為迭代器時(shí)它通常需要訪問外層容器的私有數(shù)據(jù)這就是內(nèi)部類訪問權(quán)的天然優(yōu)勢而它的構(gòu)造函數(shù)往往接收匿名對(duì)象作為參數(shù)、返回自身又牽扯到臨時(shí)量和移動(dòng)語義如果需要重載某個(gè)操作符友元很可能又冒出來了。我重構(gòu)過一個(gè)簡單的內(nèi)存塊緩存池把四個(gè)點(diǎn)湊齊了class MemoryPool { private: struct Block { void* data; size_t size; friend MemoryPool; // 讓外層類訪問塊內(nèi)部布局 }; public: MemoryPool take() { Block b acquireBlock(); return MemoryPool(b); // 匿名 MemoryPool 從 Block 構(gòu)造 } private: Block block; Block acquireBlock(); };這里MemoryPool::Block是私有內(nèi)部類外部無法知道內(nèi)存塊的布局MemoryPool作為友元能直接訪問Block內(nèi)部的data和sizetake()返回時(shí)構(gòu)造了一個(gè)匿名MemoryPool編譯器可以對(duì)它做RVO不產(chǎn)生多余的臨時(shí)對(duì)象拷貝。四段知識(shí)全部串在了一個(gè)實(shí)際結(jié)構(gòu)里這正是它們?cè)趯?shí)際代碼中協(xié)同工作的縮影。另一個(gè)常見組合是pimpl慣用法配合內(nèi)部類和移動(dòng)語義。類A持有unique_ptrImplImpl是A的私有嵌套類A的移動(dòng)構(gòu)造從unique_ptr里掏出內(nèi)部實(shí)現(xiàn)指針移動(dòng)賦值則析構(gòu)舊實(shí)現(xiàn)再接收新實(shí)現(xiàn)。這個(gè)模式下內(nèi)部類負(fù)責(zé)隱藏實(shí)現(xiàn)細(xì)節(jié)匿名對(duì)象和移動(dòng)語義負(fù)責(zé)降低成本友元反而較少出現(xiàn)因?yàn)镮mpl本來就不對(duì)外可見。設(shè)計(jì)時(shí)想清楚每個(gè)概念在這個(gè)場景中承擔(dān)什么角色就能避免生搬硬套。在我的實(shí)際體驗(yàn)里這四塊內(nèi)容還有個(gè)共同的隱藏主題C類機(jī)制的設(shè)計(jì)者始終在“安全”和“效率”之間找平衡。友元給你可控的突破封裝路徑內(nèi)部類給你可控的類型邊界匿名對(duì)象讓你能臨時(shí)持有資源又自動(dòng)釋放編譯器優(yōu)化則在語言保證的語義基礎(chǔ)上盡量幫你省錢。如果你在寫代碼時(shí)能帶著這層理解很多看似“奇怪”的設(shè)計(jì)就不再奇怪了反而能看出背后的權(quán)衡邏輯。比如看到一個(gè)類突然冒出friend class Something時(shí)先別急著批評(píng)它破壞封裝去看看這個(gè)Something是不是必須訪問私有數(shù)據(jù)的工具類或迭代器看到一個(gè)接口返回的是匿名對(duì)象時(shí)也別急著改成輸出參數(shù)先確認(rèn)RVO和移動(dòng)語義是不是已經(jīng)幫你把成本降到了接近零。C的深度通常就藏在這種權(quán)衡里把每個(gè)機(jī)制為什么存在想明白比記住一堆規(guī)則要管用得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
91亚洲黑人| 国产操逼网站亚洲一级黄色| 久久久9品一区二区三区| 大香蕉一区二区在线观看.| 亚洲欧美综合网站| 91殴美大片| 多乙久久久久久| 欧美Ⅴ性爱| 全国男人天堂网| 日本人妻天堂网站在线播放| 久久久久久久久久久久久久久性生活视频 | 男人下部插入女人下部| 日本狠狠干| 操逼操逼逼操操逼91| 国产深夜福利| 久操国产在线| 好一吊区二区| 91综合天天看| 精品人妻15区| 久久春色| 欧美日韩色综合网| 国产精品久久久久无码A√| 日本性爱视频一级| 免费观看的黄色的网站| 艹精品| 人妻一区二区三区视频 | 熟女丰满人妻一区| 一区麻豆 高清中文字幕| 一本一道人妻久久一区二区三区 | 风间由美日韩欧美久久| 黄久久| 九九热只有精品| 人人妻人人澡人人爽久久av| 1240青青草一区二区三区视频天爱| 欧美亚州综合网图片| 91 国产丝袜在线播放-百度| 呻吟 欧美 日本 中出| 日韩精品9999| 粉嫩久久久极品| 少妇熟女视频一区二区三区| 男人的天堂99| 精品九九九九| 天天躁日日躁xxxxx| 蜜乳AV一区二区三区四| 日本99久久| 亚洲有码 视频一区| 婷婷情色综合网| 精品99999久久久久久| 欧美狠狠鲁| 少妇极品熟妇人妻无码| 伊人久久亚洲色欲综合网站 | 精品网站99999| 人澡逼| 五月天婷婷社区| 亚洲激情视频| 亚洲国产ⅴ高清在线观看| 强奸国产在线| 九月婷婷| 加勒比av中文| 久草午夜| 久操网视频| 婷婷亚洲综合| 老女人碰碰在线碰碰视频| 精品国产乱码久久久兰草影视| 肉丝无码中文高清| 亚欧成人一级片在线播放| 久久久久免费看少妇A片特黄| 99热这里只有精品地址 | 小说区 图片区色 综合区| 人人干黄色| 中日韩欧美精品无码AⅤ一区二区| 一区二区三区精品视频| 久久综合精品一区二区三区| 麻豆成人影音在线| 夜夜影视四色| 天美精品av| 亚码人妻| 亚洲国产一区二区三区四区国产| 狼人综合婷婷激情四射 | 亚州AV无码国产精品| 激情99| 91天射| 97超碰香蕉| 日韩精品人妻一| 久久大香蕉手机高清| 色悠久久久av| 五月色网| 日本免费一区二区不卡| 高清无码在线播放网站| 六六久久日韩不卡| 一摸二插三插| 亚欧成人中文字幕一区| 亚州色图狠狠干| 亚洲色图欧美色图在线播放| 51久久夜色精品国产麻豆| 小少妇| 丁香7月婷婷| 69少妇一区二区| 日本三级久| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 国产免费小视频| 狼狼色丁香久久婷婷综合五月 | 青娱乐休闲视频在线观看| 人妻精品视频一区二区| 亚洲一区二区 麻豆传媒| 亚洲欧美在线丝袜| 亚州精品一区二区三区香中文字幕在线| 欧美极品色| 久久亚洲欧美中文字幕国语| 欧美熟妇操操视频| yellow网站免费观看日韩高清无码| 人人喜人人妻| 中国操逼无码| 人人搡人人肉久久精品| 国内精品嫩模A∨私拍小视频| 台湾佬激情综合| 怡红院久久老司机| 日本精品人妻少妇一区二区| 午夜福利1区2区3区| 德国一二三不卡| 色在线视频导航| 精品免费1| 女性91网站| 免費人妻夜夜爽天天爽爽一区| 蜜臀久久99精品久久久久久婷婷| 婷婷亚洲综合| 中文字幕日韩专区精品系列 | 综合亚州欧美| 中文字幕国产精品1区| 亚洲激情片| 天堂蜜桃无码视频一区二区| 日韩十八禁| 爆乳免费黄网站| 宗合情欲网| 国产操逼网站亚洲一级黄色| 97日视频| 91精品人妻一区二区-全集完整版免费正片国语-B02AV | 91精品人妻一品二品三品| 91久久18禁| 日韩操p| 中文字幕日产av人| 影视综合无码少妇| 久久精品人妻一区二区三区| 婷色五月| 日韩成人无码| 亚洲人久久久网| 人妻人人做人人澡人人爽欧美一区| 97在线播放| 日本99热| 亚洲 自拍偷拍 欧美| 人人爽夜夜玩视频| 久久人人妻| 日韩无码三级影院| 97中文热色| 久久精品视频28| 国产呦精品一区二区三区下载| 亚洲色婷婷综合久久一区二区三区| 九九久久综合| 18禁免费视频| 中文字幕三四五区| 亚洲无限观看| 亚洲天天艹| 青青操综合网| 青娱乐久久艹| AV一区观看| 素人伊尹大香蕉免费下载视频| 东北黄色电影| 色色色999| 日本潮催一卡操| 亚洲 欧美 综合 91| 亚洲青青青视频在线| 国产精品无套内谢| 日本人妻伦在线中文字幕| 中日992视频| 熟啊v色欧美热| 综合自拍| 亚洲无吗在线视频| 被窝影院午夜看片无码| 日韩在线国产字幕| 99久草| 蜜桃香蕉久草精品在线| 精国久久一区二区三区98| 久久精品人体| 大香蕉啪啪啪| 午夜天堂精品久久久久91| 日韩精品在线观看观看| 综合亚洲欧美精品日韩?v| 91 偷| 久热大香蕉网站| 欧美少妇大量自拍视频在线观看| 超碰人人色| 婷婷视频在线免费观看| 性爱免费视频成人| 日本一区二区三区午夜观看| 97色碰| 青女偷拍网| 四虎影视国产精品| 欧美顶级黄色大片免费| 日韩精品中文字幕人妻| 蜜臀一区二区三区在线 | 亚洲欧美色图小说| av在线观看不卡网站| 久操操AV电影| 人妻一区视频| 色哟哟511老熟女| 国产A v无码专区| 日韩亚洲国产视频| 国产无码一二三区| 国产亚洲国产超碰| 激情六月婷婷| 国产欧美美女免费观看视频| 久久免费看高潮毛片韩国| 亚洲 欧美 另类 综合 偷拍| 一区二区三区 丝袜高跟| a人欧美综合天堂麻豆| 夜夜久久| 亚洲爱爱视频一区二区| 亚洲男人天堂AV| 九九九精品| 日韩成人私密一级精品av| 成人线上超碰| 亚洲精品性爱片| 亚洲 欧美日韩 另类| 日本精品成人无码| 亚洲中文制服诱惑| 国产久久男人天堂| 91亚洲综合| 嫩呦国产一区二区三区AV| 91香蕉视频在线观看免费| 欧美不卡二区| 婷婷五月天色色| 久久久久久久9| 日韩97P| 免费a级毛片av无码久久精品中文字幕| 午夜男女爽爽爽影院视频| 午夜激情成人在线观看| 超碰97起碰| 中文字日本乱码| 激情五月天校园春色网| 91N综合网| 婷婷婷婷婷婷久久久久| 亚欧性爱在线无码| 天天影视射综合网| 人人妻人人爽| 欧美1区二区三区公司 | 91人妻人人澡人人爽人人精品| 97在线免费观看| 国产精品无码久久久久2028| 久久99操天天日| 中美日韩毛片| 99在线精品观看视频中文| 麻豆天美91| 五十路三级片| 国产一区麻豆免费观看| 麻豆一区二区AV天美| 91人精品妻入口| 无码自拍SM| 妇女视频网站| 搡老女人老91二区| 曰韩av中文字幕专区| 看黑丝美女操逼青青网站| 中文字幕午夜精品久久久| 熟妇综合一区二区三区| 桃色五月天| 日韩精品国模| 成人无码电影在线观看网| 丁香五月社区| 熟女熟妇伦久久影院毛片一区二区 | 女人被男人桶爽视频网站| 99久久久| 少妇熟女视频一区二区三区| 狠狠激情综合狠狠操中文字幕| 91女网站| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 91网站在线播放| 大屁股人妻女教师撅着屁股| 亚洲欧美大| 欧美丝袜亚洲| 不卡啪啪视频| 亚州色图欧美色图| 无码国产精品久久久久| 性交一区二区在线播放| 操逼视频色| 久久夜色一区二区| 粉嫩av平台| 女人天堂AV五区在线| 在线洲亚线| 2024人人操人人摸| 神马久久久久久| 久久久九97| 中文字幕在线观| 草b在线| 久久91| 四虎AV无码| 欧美中出| 国产农村妇女精品1区二区| 九九九九热| 久久人妻四季| 在线人人人人人人精品超| 亚洲欧美日韩电影网站一区 | 久久天天艹| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 东京热男人的天堂| 亚洲少妇激情视频| 自拍大香蕉乱插| 96精品一区| 婬女免费一二三区A片| 色九色久| 中文字幕精品人妻丝袜| 午夜福利在线合集| 亚洲a色| 91女人的网站| 91精品无码人妻系列| 综合网亚洲1| 久热伊人99re| 日韩精品1区2区中文字幕| 久久视频,这里只有精品 | 久久午夜伦| 人妻少妇久久中文字幕一区二区 麻豆 | 人人天天欧洲| 在线看的av| 亚欧美综合| 长长久久免费视频| 国产三级资源在线观看| 综合欧美色图| 日韩三级在线观看mp4| 在线一道啪| 精品一区二区2| 欧美亚洲综合色| 国产绿奴视频在线观看| 亚洲熟女人妻中文字幕一区二区 | 中文字幕第9页萱萱影音先锋 | 一区在线国产播放| 2017av无码免费无线播| 97亚洲国产| 人妻碰碰碰碰碰碰| 日韩欧美国产高清视频| 97香蕉网| 插插综合网天天影视网| 宗合情欲网| 成人午夜无码视频| 亚洲无码太久| 日韩综合色图| 久久精品日韩专区免费观看| 亚洲一区二区三区麻豆传媒| 日韩黄色成人性爱| 2018天天干在线视频| 大香蕉日韩| av东京热男人的天堂| 欧美性猛交美女自慰91| 这里都是精品在线观看| 国产美女mm131爽爽爽爽| 国产内射爽爽大片| 大香蕉视频啪啪啪啪| 欧亚成人在线视频| 美女97超碰| 亚洲综合97中文网| 狠狠操狠狠爱| 免费看欧美美女黄色大片| gogogo免费高清看中国国语| 亚洲天堂精品日韩电影| 成人一二三区| 加勒比无码毛片| 色超碰综合| 亚洲美欧999| 91女人的网站| 亚洲成人碰碰| 大香蕉九九| 可以在线观看AV的网站| 黄色视频特级毛片| 日本午夜操逼| 熟女精品va中文字幕| 国产黄色在线播放观看| 秋霞 色色| 欧美综合自拍| 高清在线不卡一区二区 视频| 成人国产二区三区在线,男女精品。| 免看60秒涩涩视频| 97伊人超碰| 久久精品成人一区二区三区蜜臀| 久草综合视频| 加勒比海成人视频网| 久久婷婷亚洲欧| 97欧美色资源| 超碰伊人在线| 亚洲交换| 99999国产| 天堂性色| 极品色| 三级日本一区二区三区| 91av一区二区在线观看| 操逼www.| 五月天婷婷久久| 人妻AV 中文字幕的| 嗯嗯啊在线视频| 盗摄 精品 另类 一区| 天天综合色电影| 天天日日本| 熟妇人妻一区二区三在线 | 郑州宾馆老熟女露脸啪啪| 亚洲国产一级精品毛一级精品看免费视频 | 丁香五月激情啪啪| 91美女视屏| 欧美日韩人人早| 一区二区视频你懂的| 午夜AV污污污| 香蕉人欧美综合| 成人一道本免费视频| 两性色网| 99丝袜福利在线播放| 综合久欧洲| 中文字幕欧美日本乱码一线二线 | 少妇高潮99p| 女生自91网站| 精人妻一区二区三区| 久久精品一区二区一8| 人人操人人插人www| 久操热线| 高潮综合网| 黄页av| 国产精品呦一区二区三区| 激情综合久久| ai欧美亚洲小说| 欧洲亚洲人妻无码高清久久三区四区| 亚洲春色一区二区三区| 妺妺跟我一起洗澡没忍住| 人妻天天爽夜夜爽爽| 加勒比少妇AV婷婷六月天超碰超碰| 9久久久久久| 色综合久久av| 蜜桃久久久久久| AV色五月| 无码人妻一区二区三区色欲aⅴ | 欧美午夜熟妇黑人精品91| 天堂69亚洲精品中文字| 99无码| 国产成人天堂| 秋霞午夜成人福利片片| www.色婷婷| 龙兴卡官方查询| 国产精品人妻一区二区| www.夜夜操| 综合网97| 亚洲囯产精品女人久久久| 超碰三级秋霞| 天天干18禁| 中文字幕av乱伦| 亚洲欧洲第二视频在线观看色图| 91欧洲国产成人久久精品网站| 天天干人妇| 老司机免费视频在线91| 亚欧免费| 欧美午夜色妇色鬼| 男女无套 免费网站| 91碰碰碰| 大逼色网站| www欧美性爱| 视频黄站| 日本三级R| 欧美日韩美女精品久草一区二区三区 | 日韩欧美午夜视频在线| 新视频sss国产| 成人自拍三级在线观看| 色婷婷综合久久中文字幕雪峰| 屁股久久久久久久久久| 四虎 精品 WWW| 花花AV导航| 大香交伊人网| 天美精品原创av片国产| 情色av电影| 久久久精品91八戒| 久久亚洲色图中文字幕| 一级久久久久久久久久久| 久久久免费懂色| 乱欲一区二区| 久久老熟女| 亚洲综合激情五月久久| 亚洲色图91| 嗯啊啊啊轻点视频 | 人人摸人人叼| 97视频免费播放| 2010男人的天堂| 天天综合网在线观看| 久热久一区二区三区| 亚洲人成网站7777| www.高清无码诱惑一区.com| 国产剧情AV不卡在线观看| 亚洲精品久久久久久| 五月丁香婷婷啪啪| 欧美视频一| 大乔未久88一区| 久久东京国产精品视频| 久久春色| 九九九九免费高| aaaa黄片| 深夜福利黄片| 久久久国产精品亚洲精品| 91九色精品熟女内射| 久久久久久久九九九九| 亚洲成人妻日韩在线| 中国探花熟女| 女沟厕偷窥piss小便| 久久动漫精品视频这里只有精品| 国产亚洲国产超碰| PMv在线观看| 老鸭窝日丰县女人| 嗯~啊~快点 死我视频| 青娱乐国产盛宴视频| 91精品人妻一品二品三品| 超碰午夜在线| 色玖玖| 人人贴人人摸| 女人综合网| 美女毛片999| 日本三级韩国三级99| 小日子操bb在线看| 女人天堂av在线播放| 中文在线视频| 99啪啪| 亚洲丝袜二区| 日操粉逼逼| 麻豆国产97在线| 成人一二三区| 亚洲日本天堂| 九九热五区| 亚洲 日本 一 二 三| 亚洲无码超碰免费| 另类综合另类| 青青草中文-久久青草精品一区二区三 | 久久草视频污视频| 玖玖爱伊人玖玖爱| 影音先锋日本一区二区| 久久精彩视频9| 天美传媒Av在线| 秋霞一集毛片观看| 五月久久HDAV| 99草精| 精品大久久| 国产精品久久久久久片| 亚洲av性爱电影| 中文字幕免费在线观看| 97丝袜亚洲在线播放| 久久精品免费| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 啊v在线观看视频| 97超碰人人模人人拍人人| 亚州伊人色综台| 欧亚在线视频| 国产女人成人精品视频| 在线看片国产精品每日更新| 日韩中文字幕国产| 亚洲精品免费中文字幕| 韩三级a视频在线观看 | 久思思热视频在线观看| 91色人妻| 高潮的A片激情扒开一区| 日韩兔费看黄片| 天久久久噜噜噜久久国产精品爽爽 | 国产农村妇女毛片精品久久| 91麻豆天美国产欧美高潮| 亚洲999综合| 久久久久921| 999熟女精品| 后入日本1234| 91欧| 97超碰人人操人人操| 免费AV中文网在线观看| 久久综合九色综合欧洲98| 久久婷婷电影网| 美国日韩黄片| 99色热国产视频精品| 日本Xx性爱| 亚洲综合婷婷| 色av中文字| 97色视频在线| 91老熟女91老女人| 五月婷婷六月丁香网址| 国产亚洲日韩在线三区黑人| 欧美性爱伊人| 95精品在线| 日日夜夜青青草母狗| 91麻豆一二三区| 久久久涩| 人人妻碰人人免费| 91精品人妻电影| 五月天婷婷小说| 国产精品肉丝自拍| 精品一区二区久久| 久久老女人| 伊人精品久久网站| 丁香五月性| 九九十八精品| 欧美丰满少妇交换91欧美精品| 亚洲丝袜综合| 日本欧美一区二区三区免费| 国产少妇肉丝在线观看| 欧美韩国你懂得在线 | 男人的天堂在线| 国产精品久久泡妞网站| 大香蕉视频一二三区| 午夜精品探花| 不卡九肏| 亚洲无码一区成人免费午夜 | 久久超碰大香蕉| 男人的天堂Va| 18禁免费视频| 97久久资源| 久久久久久久9最新免费视频观看| 国产又粗又长又大的视频| 中文字幕日韩精品久久| 六月婷婷激情| 美女让帅哥通她小鸡鸡| 成人av毛片在线观看| 蜜乳av首页| 久草在| 2021国产成人精品久久| 日韩女模中文造逼| 麻豆成人av| 翔田千里AV无码秘 三区| 亚洲一区二区性爱电影| 91精品成人| 精品999一区二区| 亚洲精品a人片在线观看视| 91美乳| 亚洲色图超碰在线| 国产自偷| 午夜影美女日鸡鸡天天视频国产| 天天综合影院91| 国产精品久久蜜乳av| 日韩精品永久在线观看| 亚洲限制级| 久久久久久亚洲Av无码精| 91一区二区| 久久日韩肥臀| 成人性爱电影一区二区| 曰韩香蕉97| 国内亚洲精彩视频在线| 人妻少妇色综合| 欧美五十路熟| 激情终合网| 欧美亚洲国产91在线| 大香蕉碰碰| 老熟女91视频| 亚洲天堂人妻一区二区| 呦呦一区| WWW4虎| 日本国产欧美一区三区二区| 国产精品久久久亚洲一区| 不卡视频一区蜜桃视频 | 亚洲91网站| 日韩操逼HD| 91精品免费| 尤物一级在线免费观看| 久久久久久99999国产精品| 欧美系列在线一区二区| 亚洲蜜臀精品视频久久| 婷婷综合网站| 啊啊啊爽爽| 久九干| 蜜乳Av成人片网站| 九久久精品| 成人AV在线电影| 亚州综合色| 亚洲91亚洲| 操逼逼中文字幕| 国产精品69久久久久孕妇欧美| 日本中文字幕在线视频| 高清孕妇孕交 交| 天天看少妇| 国产最新小视频在线播放下载| 极品色电影院| 日本99热| 久久欲| 午夜操操操| 精品国产一区二区三区av在线资源| 2017亚洲天堂| 综合久久99亚洲人妻中文在线| 人人干人人搞人人摸| 欧美精品庄| 75大香蕉| 99久久9| 国产主播福利| 国产夫妻性生活视频| 久久久久精| 亚洲影院小综合| 日韩亚洲国产视频| 日日操夜夜操天天操免费观看麻豆| 国产性刺激| 久久久国产成人一区二区三区在线| 精品对白久久不卡| 97伪v| 人妻天堂综合网| 丰满岳乱妇一区二区三区| 国产区在线| 天天插夜夜爽| 91九久| 婬女免费一二三区A片| 亚洲人成在线放东京热| 91老熟女91老女人| 日韩在线人妻网站| 长长久久88视频| 综合操逼| 亚洲春色欧美激情自拍| 亚洲欧洲综合| 加勒比五月天| 九九英色视频| 亚洲色天堂日韩中| 色综合婷婷| 操操操日本的逼| A级片日韩欧美国产欧美视频精选观看| 久久9免费视频| 国厂麻豆77q4| 国产人伦精品一区二区三区| 91一起操| Blackedraw视频一区二区| 免费岛国一级片| 日韩欧美中文字幕搭讪巨乳美人妻视频| 四季AV一区二区凹凸精品小说| 精品国产乱码久久久久久久久1 | 天天舔天天日天天射| 婷婷亚洲中文字幕在线| 91久久久久久久| 日韩精品亚洲专区在线影视| 国产高清精品一区二区三区毛片 | 91色婷婷综合久久中文字幕二区| 91人妻中文| 高清国产成人无码| 影音先锋每日最新资源在线观看 | 午夜.DJ高清在线观看免费7| 国产精品 视频| 亚洲久9| 亚州性色| 欧美高清16| 夜夜高潮夜夜爽夜夜爱爱一区| 亚洲国产蜜臀系列在线观看| 日本熟妇精品九九| 国产精品久久久九九九| 日韩人妻精品中文字幕| 青青草五月天| 久久超碰98| 日韩精品人妻中文字有码在线| 操一区| 一区二区三区色综合| 日本久久综合| 久久视频,这里只有精品 | 国产日韩美女小穴视频网站不卡| 本道在线| 久久大香蕉97| 丝袜AV一区二区三区| 日韩十八禁| 97色色色| 青娱乐福利99| 亚洲第一精品在线视频| 夜夜天天噜狠狠爱2021| 国产精品无码论坛| 男人天堂久久精品不卡| asc国产精品| 国产精品97视频| 久久精品一区二区| 欧美性爱第一页久久| 99这里只有精品国产| 亚洲蜜乳av| 色色色色电影网| 内射白嫩美女| 亚洲少妇在线影音| 欧美日韩国产色五月综合在线| 超碰97人人乐| 亚洲精品97| 人人操人人操人人人操| 成人福利视频网| 野狼激情网| 欧美少妇性乱| 91精品人妻一品二品三品| 91福利网在线观看| 午夜偷拍久久熟女| 草草影院在线视频| 欧美亚洲高清不卡| 好爽视频在线观看| 熟女这里只有精品6| 国产女性无套 免费观看| 日韩天美| 1024午夜激情男人的天堂| 老女人综合| 俄罗斯一区二区视频在线观看| www.av在线观看| 亚洲熟妇无码一区二区三区| 中文字幕伊人| 日韩中文字墓| ?亚洲伊人伊成久久人综合网| 超碰调教97| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 人妻激情在线视频| 亚洲成a人v欧美综合天堂下载 | 欧美线天码中字| 欧美日韩在线视频网站| 国产精品熟女乱伦| 欧美激情久| 中文久久久| 日本在线视频导航| 日本东京热大香蕉a片| 国产精品噜噜噜日日日| 2019久久久久久久久福利| 91色艳| 青青草五月份天| 日韩欧美成人综合在线| 91肏屄网| 亚洲男人天堂2017| 国产视频一区二区免费| 国产少妇高潮| 超碰精品日韩欧美国产| 亚洲人成网www| 国产精品午夜精品| 日韩人妻播放| 欧美色图 人妻| 嗯嗯嗯啊啊啊在线免费观看| 高清不卡 中文 人妻| 91丨九色丨国产丨人妻在线 | 日本东京热大香蕉a片| 精品亚洲| 91亚州日韩高清| 东京太热男人的天堂久久久| 色噜噜人妻丝袜a∨先锋影 | 久操操AV电影| 日本不卡码黄色 | 天天综合有色网| 亚洲中文字幕在线视频一区二区| 日本一本一区二区三区四区五区欧美日韩中文字幕| 中文字幕诱惑制服人妻丝袜美丝袜美 | 精品久久久久久中文字幕视频免费 | www被窝色com| 中国国产精品一区视频| 青青草大香蕉在线视频| 亚欧毛片基地国产毛片基地| 四虎影视在线| 亚洲 无码 偷拍| 日本伦理一区二区| 大屁股人妻女教师撅着屁股| 性色中出| 国产精品一区二区亚洲人成毛片| 亚州综合电影| 久久久久久69国产一区二区| 精品网站99999| 日韩久久.一级黄色片| 91精品免费| 亚洲成A∨人影院在线欢看| 综合色久欲| 丁香五月天堂网| 青青久久艹| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 久久噜| 欧美日韩性爱精品| 97在线免费看视频| 超碰97资源中文字幕| 黑人白女精品一区| 国产精品高朝久久久久久久| 日韩性爱小视频在线观看| 麻豆色99999| 懂色AV一区二区三区| 美日韩男女操屄视频| 国产小炒后入式| 国产欧美日韩在线不卡第一页| 欧美色干| 欧美72网页| 嫖老熟女A片一二三区| 精品国产乱码久久久| 中国91AV| 麻豆AV短剧| 操逼操操操91| 97香蕉网| 亚洲精品白丝| 日韩人妻精品久久久久| 浓厚中出中文字幕在线| 亚洲素人综合| AND人妻系列| 操比国产| 视频国产成人精品日本亚洲18| 青青伊人久久| 91在线页| 中日韩熟女| 天天综合网91| 2017超碰| 久久25| 99ri在线视频| 欧美午夜视频免费观看| 大鸡巴久久| 欧美综合在线91| 国产999精品久久久久久| 免费?级毛片无码?∨蜜芽试看| 天美av在线| 亚洲大色堂| 嗯啊不要在线观看嗯啊| 亚洲高清国产理伦片| 91精品老女人| 欧美日韩系列| 99蜜桃臀亚洲成人在线观看| 无码色| 强奸乱伦日韩AV| 欧美一区二区一级岛国大片| 国产9l 大屁股| 91精品久久久久久77777| 久久伊人在线五区| 99热在线播放| 成人免费福利网站国产| 欧美精品23| 久久午夜色播影院免费高清| AV色五月| 东京热av男人的天堂| 欧美三级一级| 五月婷婷激情| 亚洲aV无码成人在线观看| 中文字幕人成乱码熟女香港| 国产剧情在线| 日日骚网站| 日本五区不卡| 人妻无码一区二区三区久久99| 日本精品国产视频| 国产自产91区13区| 亚洲 欧美都市激情| 99久re热视频精品98| 免费看A片毛毛片在线播| 欧美日韩另类在线播放| 欧美18老人禁| 日本一区二区中文字幕久久| 嗯嗯啊啊啊好爽| 熟妇女伦乱视频视频 | 婷婷五月天影院| 国产一级黄色片在线观看| 国精精品无码一二三区水多多| 国产美女自拍AV| 成人AV超碰免费在线| 欧美性生活男人的天堂| 日韩免费一级性爱视频| 97在线免费视频| 少妇色| 国产一级舔足在线观看| 国产一级内射高清视频| 国产60页| 操国产逼| 69XX一中文字幕人妻91| 国产高清视频无码在线| 激情天天视频| 国产女同视频在线播放| 91色爽欧美| 毛片17S| 蜜臀99999| 99re热| 疯操AV| 亚洲丝袜少妇在线| 国产精品久久久| 亚洲男人综合| 久久毛卡| 欧美性爱精品一区二区| www99热| 日韩三级久久久| 少妇六月天| 9999九九九久久久| 97中文字幕一区| 国产精品乱码久久| 欧美大香蕉久| 午夜大香蕉| 人妻一区二区三区| 国产精品久久久久久久久久久久久久久| 日韩精品影视| 亚洲无码日韩电影| 日本黄色精品专区网站| 欧美黄片欧美黄片xxx| 激情五月天视频| 久久人妻四季| 老鸭窝日丰县女人| 日日爱99| 中文字幕亚洲永久精品| 五月天综合网| 操美女人妻| 久久久无码精品人妻二区| 久久久精品网站| 亚洲最大成人a毛毛片| 99热综合| 怡红院成人av| 人人妻人人澡人人爽久久av| 欧美18 在线观看| 欧美日韩岛国大片在线观看| 麻豆 欧美 日韩| 九9热伊人| 啊啊啊好想要| AV免费在线播放一区| 91网站18在线观看| 青操影院| 国内亚洲高清无码| 国产亚洲综合欧美一区| 日韩成人午夜精品久久高潮| 久肏视频字幕| 欧洲综合无码| 久久麻豆一区二区| 男人的天堂无码| 午夜男女爽爽大片免费观看| 亚洲av强奸乱伦| 日日A∨| 国产无码成人无码| 成人午夜视频免费播放| 久久久久久久久久久999| 91久| 亚洲制服欧美另类内射| 日han少妇无码| 后入式免费视频| 超碰成人国产| 日韩精品三级片长长久久| 97香蕉网| AV九九| 日本97久久| 人人人人插| 久久久婷婷| 亚洲?V高清一区二区三区尤物| 操逼日韩无码| 精彩久久中文| 欧美日韩国产三级黄色| 97硬碰| 大学生美女口爆| 激情文学网伊人| 蜜臀久久99精品久久久久电影| av绯色| 操死我了嗯嗯嗯| 国产精品一区二区久久精品| 欧美激情总合网| 中文字幕乱码在线观看| 免费一级视频特黄色大片| 嗯~啊~快点 死我视频免费看网站| 欧美熟妇成人一区二区| 1024亚洲中文字幕久在线看片你懂的| 国产91美女视频| 色婷婷香蕉| 小电影欧美91| 夜夜草网站| 日韩欧美三级| 国产成人综合网| 老熟女阿 国产91| 91狠狠综合久久| 精品国产乱码久久久| 99九九精品| 国产sv美女内射| 午夜天堂精品久久久久91| 亚洲熟女人妻中文字幕一区二区 | 综合色好色| 6080yy午夜理论三级一区二区三区无码| 78m啪啪啪| 日韩人妻大香蕉| 国产品精品自在在线午夜免费| 小草精彩毛片| 伊人网免费视频| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 春色91| 亚洲色图在线视频| 日韩一级性爱无码| 日韩午夜国产| 久久久久久久国产a∨| 91成人亚洲色图| 95人妻爽爽人人做人人澡| 青青草国产欧美非洲黑人| 精爱久久| 国产精品一级毛片不卡视| 久热精品在线| 超碰 97国产熟女| 亚川综合视频| 999久久芭蕾| 国产11页| 91深夜夜| 欧美天天影院| 丝袜制服字幕在线| 中国大陆国产高清AⅤ毛片| 五月天AV资源| 91精品电影18| 啪啪AV导航| 九九九国产| 色爱综合网欧美| 亚欧Av| 尤物av网站免费在线播放| 亚洲熟久久| 亚洲激情久久| 成年人三级黄色片视频| 久久久天堂| 五月天综合网| 久99| 日本十八禁免费看污网站| 我要色综合网站| 精产国品一区二三产品| 立川理惠无码一区二区| 翔田千里A片一区二区| 青青草久久在线| 麻豆天美国美国产| 亚洲精品第一| 天堂v无码免费视频| 欧美精品,四区。五区| 日韩国产品视频中文字| 婷婷激情五月天小说网| 男人天堂网址| 午夜九九| 日本精品免费一区二区三区四区| 免费观看啪视频| 岛国免费黄色网址| 中文字幕99999| 一二三四区操操Av| 九九拍拍精品视频在线播放 | 69天堂| 9久9久| 日韩综合97P| 一区二区三区日韩欧美| 久热超碰| 欧美日韩国内不卡| 国产家庭乱伦性爱视频| 色婷婷一区二区三区久久| 亚洲男人天堂2| 亚洲限制级| 亚洲欧美天堂在线| 亚洲少妇喷视频看| 国产超碰人人操| 久久美女国产| 久久亚州精品成人Av无| 啊啊啊草死我| 97操B| 久久久九| 91国产伊人大香蕉| 亚洲国内精品成人不卡| 亚洲人在线| 亚洲综合网电影91| 五月婷婷六月丁香| 黄片www.| 午夜欧美女人操逼| 波多野结衣先锋影音| 亚洲男人久久综合天堂| 亚洲伊人成综合成人网| www.男人的天堂| 极品少妇久久久| 嗯嗯啊啊啊好爽| 欧美九九九| 日日骚网站| 91爱剪切久久| 97在线观| 日本加勒比无码专区| 欧美色97| 中国熟妇| 中文字幕黄色一起草| 久久久精选| 亚洲色电影在线| 男人精品区| 97色亚洲| 中文字幕天堂在线| 成人精品久久久午夜福利| 三级日本一区二区三区| 亚洲国产精品成人综合| 影音先锋日本乱伦| 五月天久久综合网| 免费精品中文字幕| 一级黄色性爱A级片| 日本欧美亚洲高清在线看| 国产精品久久成人免费| 黄色av一区二区在线| 久久婷综合| 国产伦精品一区二区三区视频女| 亚洲美乱| 大香蕉综合久久| 亚洲综合大片|