青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

loop_in_codes

低調(diào)做技術(shù)__歡迎移步我的獨(dú)立博客 codemaro.com 微博 kevinlynx

最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序


說(shuō)下最近自己遇到的兩個(gè)值得讓人注意的問(wèn)題。
其一是關(guān)于自己給std::map寫(xiě)less predicate,std::map第三個(gè)參數(shù)是一個(gè)典型的functor。map內(nèi)部將使用
這個(gè)functor去判定兩個(gè)元素是否相等,默認(rèn)使用的是std::less。但是為什么傳入的是一個(gè)判斷第一個(gè)參數(shù)
小于第二個(gè)參數(shù)的functor,而不是一個(gè)判斷兩個(gè)參數(shù)是否相等的functor?按照STL文檔的說(shuō)法,當(dāng)檢查兩
個(gè)參數(shù)沒(méi)有小于也沒(méi)有大于的關(guān)系時(shí),就表示兩個(gè)參數(shù)相等。不管怎樣,我遇到了需要自己寫(xiě)這個(gè)functor
的需求,于是:

struct MyLess
{
    bool operator() ( long left, long right )
    {
        //...
    }
};

DEBUG模式下編譯沒(méi)問(wèn)題,RELEASE模式下卻出現(xiàn)C3848的錯(cuò)誤。這就有點(diǎn)奇怪了,如果確實(shí)存在語(yǔ)法錯(cuò)誤,
那么DEBUG和RELASE應(yīng)該一樣才對(duì)。查了下MSDN,C3848的錯(cuò)誤是因?yàn)閏onst限定符造成的,如:

const MyLess pr;
pr(); // C3848

于是,在operator()后加上const,就OK了。看了下VC std::map相關(guān)代碼,以為是DEBUG和RELEASE使用了不
同的代碼造成。但是我始終沒(méi)找到不同點(diǎn)。另一方面,就STL內(nèi)部的風(fēng)格來(lái)看,應(yīng)該不會(huì)把predicator處理
成const &之類的東西,全部是value形式的。奇怪了。

第二個(gè)問(wèn)題,涉及到靜態(tài)變量。這個(gè)東西給我的印象特別深刻,因?yàn)橐郧叭ヒ患彝馄髴?yīng)聘時(shí)被問(wèn)到,當(dāng)時(shí)
覺(jué)得那個(gè)LEADER特別厲害。回來(lái)后讓我反思,是不是過(guò)多地關(guān)注了C++里的花哨,而漏掉了C里的樸素?導(dǎo)致
我至今對(duì)純C存在偏好。

說(shuō)正題,我現(xiàn)在有如下的文件關(guān)系:

// def.h
struct Obj
{
    Obj()
 {
  ObjMgr::AddObj( id, this );
 }
 int id;
};

struct ObjMgr
{
    static void AddObj( int id, Obj *t )
 {
  ObjTable[id] = t;
 }
 static std::map<int, Obj*> ObjTable;
};

static Obj _t;

// ObjMgr.cpp
#include "def.h"

static std::map<int, Obj*>::ObjMgr ObjTable;

// main.cpp
#include "def.h"

這里舉的例子可能有點(diǎn)不恰當(dāng),我在一臺(tái)沒(méi)有編譯器的機(jī)器上寫(xiě)的這篇文章。忽略掉這些旁支末節(jié)。我的意思,
就是想讓Obj自己自動(dòng)向ObjMgr里添加自己。我們都知道靜態(tài)變量將在程序啟動(dòng)時(shí)被初始化,先于main執(zhí)行之前。

上面代碼有兩個(gè)問(wèn)題:

一、
代碼沒(méi)有按照我預(yù)期地執(zhí)行,如果你按照我的意思做個(gè)測(cè)試,你的程序甚至在進(jìn)main之前就crash了。我假定你
用的是VC,因?yàn)槲覜](méi)在其他編譯器上試驗(yàn)過(guò)。問(wèn)題就在于,Obj的構(gòu)造依賴于ObjTable這個(gè)map對(duì)象。在調(diào)試過(guò)程
中我發(fā)現(xiàn),雖然ObjTable擁有了內(nèi)存空間,其this指針有效,但是,map對(duì)象并沒(méi)有得到構(gòu)造。我的意思是,Obj
的構(gòu)造先于ObjTable構(gòu)造(下幾個(gè)斷點(diǎn)即可輕易發(fā)現(xiàn)),那么在執(zhí)行map::operator[]時(shí),就出錯(cuò)了,因?yàn)檫@個(gè)時(shí)候
map里相關(guān)數(shù)據(jù)還沒(méi)準(zhǔn)備好。

那是否存在某種機(jī)制可以手動(dòng)靜態(tài)變量的初始化順序呢?不知道。我最后怎樣解決這個(gè)問(wèn)題的?

二、
在還沒(méi)有想到解決辦法之前(不改變我的設(shè)計(jì)),我發(fā)現(xiàn)了這段代碼的另一個(gè)問(wèn)題:我在頭文件里定義了靜態(tài)
變量:static Obj _t; 這有什么問(wèn)題?想想預(yù)編譯這個(gè)過(guò)程即可知道,頭文件在預(yù)編譯階段被文本展開(kāi)到CPP
文件里,然后,ObjMgr.cpp和main.cpp文件里都將出現(xiàn)static Obj _t;代碼。也就是說(shuō),ObjMgr.obj和main.obj
里都有一個(gè)文件靜態(tài)變量_t。

看來(lái),在頭文件里放這個(gè)靜態(tài)變量是肯定不對(duì)的。于是,我將_t移動(dòng)到ObjMgr.cpp里:

// ObjMgr.cpp
#include "def.h"

static std::map<int, Obj*>::ObjMgr ObjTable;
static Obj _t;

按照這樣的順序定義后,_t的構(gòu)造居然晚于ObjTable了。也就是說(shuō),放置于前面的變量定義,就意味著它將被
首先構(gòu)造初始化。這樣兩個(gè)問(wèn)題都解決了。

但是,誰(shuí)能保證這一點(diǎn)特性?C標(biāo)準(zhǔn)文檔里?還是VC編譯器自己?

 

 

 


 

posted on 2008-11-11 17:55 Kevin Lynx 閱讀(7461) 評(píng)論(13)  編輯 收藏 引用 所屬分類: c/c++通用編程模塊架構(gòu)

評(píng)論

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-11 19:04 空明流轉(zhuǎn)

沒(méi)有保證初始化順序,要用一些模式手工初始化。  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-11 19:42 嘯天豬

第一個(gè)問(wèn)題:STL要求predicator應(yīng)該是純函數(shù)性質(zhì),不能有狀態(tài)變化;估計(jì)是你的實(shí)現(xiàn)為了強(qiáng)制這一點(diǎn),在模板內(nèi)部做了些手腳吧

第二個(gè)問(wèn)題:同一TU內(nèi),non-local static varible按照定義的順序被初始化,這是標(biāo)準(zhǔn)所規(guī)定的  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-11 19:57 Xw.Y

1. 沒(méi)想法

2. 全局的靜態(tài)變量順序沒(méi)有保證。偶也吃過(guò)苦頭,查文檔無(wú)果。
通常偶都是在main起來(lái)后重新初始化靜態(tài)變量。申明用指針而不用實(shí)例。
你的例子太復(fù)雜了,
我印象中這樣就有問(wèn)題(不過(guò)我也可能不正確,這種太容易忘記了)
//somefile.cpp
static bool gs_initialized = false;

class A{
public:
A(void) { gs_initialized = true; }
};

A InstanceA;

int main(void){
// gs_initialized true/false不確定
}

問(wèn)下樓上的,TU是指什么?  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-12 09:07 Kevin Lynx

@嘯天豬
STL predicator不會(huì)要求是純虛函數(shù)性質(zhì),唯一的要求就是這是一個(gè)具有operator()性質(zhì)的東西,普通C函數(shù),重載了operator() 的類均可。我文章里說(shuō)的問(wèn)題在于,函數(shù)不是:
bool operator() ( .... ) const // 需要加上const
{
}

TU是不是編譯單元?如果是標(biāo)準(zhǔn)規(guī)定,哥們可以給我下文檔鏈接不?

@Xw.Y

我的問(wèn)題同你的本質(zhì)是一樣的。

  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-12 09:54 浪跡天涯

感覺(jué)有點(diǎn)印象,后來(lái)翻翻EffectiveC++.chm,雜項(xiàng)->條款47:

對(duì)于不同被編譯單元中的非局部靜態(tài)對(duì)象,你一定不希望自己的程序行為依賴于它們的初始化順序,因?yàn)槟銦o(wú)法控制這種順序。讓我再重復(fù)一遍:你絕對(duì)無(wú)法控制不同被編譯單元中非局部靜態(tài)對(duì)象的初始化順序。

很自然地想知道,為什么無(wú)法控制?

這是因?yàn)椋_定非局部靜態(tài)對(duì)象初始化的 " 正確" 順序很困難,非常困難,極其困難。即使在它最普通的形式下 ---- 多個(gè)被編譯單元,多個(gè)通過(guò)隱式模板實(shí)例化所生成的非局部靜態(tài)對(duì)象(隱式模板實(shí)例化時(shí),它們本身可能都會(huì)產(chǎn)生這樣的問(wèn)題) ---- 不僅不可能確定正確的初始化順序,往往連找一個(gè)可以確定正確順序的特殊情況都不值得。

在 "混沌理論" 領(lǐng)域,有一個(gè)原理稱為 "蝴蝶效應(yīng)" 。這條原理聲稱,世界某個(gè)角落的一只蝴蝶拍動(dòng)翅膀,會(huì)對(duì)大氣產(chǎn)生微小的影響,從而導(dǎo)致某個(gè)遙遠(yuǎn)的地方天氣模式的深刻變化。稍微準(zhǔn)確一點(diǎn)來(lái)說(shuō)也就是:對(duì)于某種系統(tǒng),輸入的微小干擾會(huì)導(dǎo)致輸出徹底的變化。

軟件系統(tǒng)的開(kāi)發(fā)也表現(xiàn)了自身的 "蝴蝶效應(yīng)"。一些系統(tǒng)對(duì)需求的細(xì)節(jié)高度敏感,需求發(fā)生細(xì)小的變化,實(shí)現(xiàn)系統(tǒng)的難易程度就會(huì)發(fā)生巨大的變化。例如,條款29說(shuō)明,將一個(gè)隱式轉(zhuǎn)換的要求從 "String到char*" 改為 "String到const char*",就可以將一個(gè)運(yùn)行慢、容易出錯(cuò)的函數(shù)用一個(gè)運(yùn)行快并且安全的函數(shù)來(lái)代替。

確保非局部靜態(tài)對(duì)象在使用前被初始化的問(wèn)題也和上面一樣,它對(duì)你的實(shí)現(xiàn)細(xì)節(jié)十分敏感。但是,如果你不強(qiáng)求一定要訪問(wèn) "非局部靜態(tài)對(duì)象",而愿意訪問(wèn)具有和非局部靜態(tài)對(duì)象 "相似行為" 的對(duì)象(不存在初始化問(wèn)題),難題就消失了。取而代之的是一個(gè)很容易解決的問(wèn)題,甚至稱不上是一個(gè)問(wèn)題。

這種技術(shù) ---- 有時(shí)稱為 "單一模式"(譯注:即Singleton pattern,參見(jiàn) "Design Patterns" 一書(shū))---- 本身很簡(jiǎn)單。首先,把每個(gè)非局部靜態(tài)對(duì)象轉(zhuǎn)移到函數(shù)中,聲明它為static。其次,讓函數(shù)返回這個(gè)對(duì)象的引用。這樣,用戶將通過(guò)函數(shù)調(diào)用來(lái)指明對(duì)象。換句話說(shuō),用函數(shù)內(nèi)部的static對(duì)象取代了非局部靜態(tài)對(duì)象。(參見(jiàn)條款M26)

這個(gè)方法基于這樣的事實(shí):雖然關(guān)于 "非局部" 靜態(tài)對(duì)象什么時(shí)候被初始化,C++幾乎沒(méi)有做過(guò)說(shuō)明;但對(duì)于函數(shù)中的靜態(tài)對(duì)象(即,"局部" 靜態(tài)對(duì)象)什么時(shí)候被初始化,C++卻明確指出:它們?cè)诤瘮?shù)調(diào)用過(guò)程中初次碰到對(duì)象的定義時(shí)被初始化。所以,如果你不對(duì)非局部靜態(tài)對(duì)象直接訪問(wèn),而用返回局部靜態(tài)對(duì)象引用的函數(shù)調(diào)用來(lái)代替,就能保證從函數(shù)得到的引用指向的是被初始化了的對(duì)象。這樣做的另一個(gè)好處是,如果這個(gè)模擬非局部靜態(tài)對(duì)象的函數(shù)從沒(méi)有被調(diào)用,也就永遠(yuǎn)不會(huì)帶來(lái)對(duì)象構(gòu)造和銷(xiāo)毀的開(kāi)銷(xiāo);而對(duì)于非局部靜態(tài)對(duì)象來(lái)說(shuō)就沒(méi)有這樣的好事。

  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-12 13:33 嘯天豬

1 我的意思是predicatory應(yīng)該像數(shù)學(xué)函數(shù)那樣,不具備狀態(tài)變化,而不是pure virtual 這個(gè)意思

你的STL實(shí)現(xiàn)為了強(qiáng)制這個(gè)語(yǔ)意,總是使用const predicator object,這樣就只能調(diào)用operator () const,強(qiáng)制predicator在被使用時(shí)無(wú)法發(fā)生狀態(tài)變化。

STL對(duì)predicator的這個(gè)要求是語(yǔ)意上的,而不是語(yǔ)法上的;Effective STL上解釋的挺好的

http://stl.winterxy.com/html/item_39.html


2 TU就是編譯單元

參見(jiàn) "C++ standard 2003: 3.6.2 Initialization of non-local objects"

http://d.download.csdn.net/source/216275
  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-12 13:45 luke

對(duì)于靜態(tài)變量的初始化順序問(wèn)題,在thinking in java 的name control 一章里介紹了兩個(gè)技巧來(lái)出來(lái)處理這類問(wèn)題。  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2008-11-12 13:47 luke

錯(cuò)了,是thinking in c++  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2009-06-04 17:56 adie

1. "另一方面,就STL內(nèi)部的風(fēng)格來(lái)看,應(yīng)該不會(huì)把predicator處理
成const &之類的東西,全部是value形式的。奇怪了。"

STL 內(nèi)部就是 const & 的,對(duì)模版類型參數(shù)拷貝代價(jià)是未知的,而且拷貝構(gòu)造函數(shù)是否實(shí)現(xiàn)都未知,必須是 const& 的. VC8 的 std::less:

template<class _Ty>
struct less
: public binary_function<_Ty, _Ty, bool>
{ // functor for operator<
bool operator()(const _Ty& _Left, const _Ty& _Right) const
{ // apply operator< to operands
return (_Left < _Right);
}
};

2. 不同編譯單元的靜態(tài)變量初始化順序不確定是因?yàn)殒溄悠鞯捻樞驘o(wú)法保證,和寫(xiě)的 makefile 有關(guān). 但在同一個(gè)編譯單元的靜態(tài)變量初始化順序是可以確定的。
  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2009-06-04 20:28 Kevin Lynx

@adie
1.我這里說(shuō)的predicator,指的是less本身。包括傳給find_if的functor,都被我稱為predicator。STL內(nèi)部保存這種predicator,都是以value的形式保存。既然是value的形式,就不會(huì)存在調(diào)用這個(gè)predicator的operator()必須要求其為bool (*)() const類型的。以前沒(méi)搞清楚這個(gè)問(wèn)題,現(xiàn)在也沒(méi)關(guān)注過(guò)。
你舉的例子中,談的是這個(gè)predicator的bool operator()( ...)成員函數(shù)的參數(shù)為const&。對(duì)于less而言,它的這個(gè)operator()的參數(shù)是map內(nèi)部保存的element。無(wú)論是從效率還是其他方面,是肯定要const&的。

2.初始化順序這個(gè)問(wèn)題,我對(duì)鏈接器細(xì)節(jié)沒(méi)怎么關(guān)注過(guò)。不過(guò),情況可能真如你所說(shuō)。謝過(guò)。

  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2009-06-05 10:29 adie

呵呵,因?yàn)?predicator 是個(gè)模板參數(shù),不存在 const& 的形式,所以理解成了它的參數(shù)了。
從語(yǔ)義上說(shuō),確如嘯天豬所言,要求它為 const 雖然不能保證就滿足要求,的確也是合理的。
從語(yǔ)法上來(lái)說(shuō),雖然這個(gè)比較對(duì)象是以 value 的形式保存的,但是使用這個(gè)比較對(duì)象的函數(shù)是 const 的,因此他得到的 this 指針就是 const 的,它的成員 predicator 對(duì)象也就是 const 的了。
至于 Debug 可以編譯通過(guò)確實(shí)是由于 Debug 和 Release 版的代碼不一樣,Release 比較的時(shí)候用的:
#define _DEBUG_LT_PRED(pred, x, y) pred(x, y)
Debug 版比較的時(shí)候用的:
#define _DEBUG_LT_PRED(pred, x, y) _Debug_lt_pred(pred, x, y, __FILEW__, __LINE__)
可以看到 Debug 版本比較的時(shí)候用了一個(gè)函數(shù),比較對(duì)象作為函數(shù)參數(shù)傳入的時(shí)候進(jìn)行了一次拷貝,拷貝后的對(duì)象沒(méi)有 const 了。  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2009-06-05 10:36 Kevin Lynx

@adie
剛正在看vc2005中的xtree找原因。在_Lbound中,確實(shí)是因?yàn)開(kāi)DEBUG_LT_PRED導(dǎo)致DEBUG和RELEASE使用了不同的代碼。而且確實(shí)是因?yàn)開(kāi)Lbound是const的才導(dǎo)致this->comp也是const的。但是,在看到你評(píng)論之前我還沒(méi)反應(yīng)過(guò)來(lái):因?yàn)閠his->comp通過(guò)作為函數(shù)參數(shù)而去掉了const修飾,囧。
起碼真相大白了。3Q
  回復(fù)  更多評(píng)論   

# re: 最近的兩個(gè)問(wèn)題:less for std::map,靜態(tài)變量初始化順序 2011-09-21 17:05 pop

關(guān)于ObjMgr.obj和main.obj里都有一個(gè)文件靜態(tài)變量_t的問(wèn)題,我想說(shuō),既然都是全局的了,為什么還要static呢,難道全局+靜態(tài)這樣定義變量_t不會(huì)覺(jué)得有重復(fù)的感覺(jué)嗎(靜態(tài)其實(shí)也是為了數(shù)據(jù)共享);,是不是靜態(tài)的全局變量應(yīng)該不提倡這種寫(xiě)法呢;
另外,對(duì)于普通的全局變量定義,都會(huì)寫(xiě)在.cpp內(nèi),然后.h是extern它,還得加上#param once防止重復(fù)包含,才是標(biāo)準(zhǔn)寫(xiě)法不是?否則,不出現(xiàn)多個(gè)_t才怪~  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久噜噜噜久久狠狠50岁| 亚洲性夜色噜噜噜7777| 午夜精品免费在线| 久久国产精品久久久久久久久久| 亚洲精品视频在线看| 亚洲尤物视频网| 老司机免费视频一区二区| 99这里只有久久精品视频| 久久精品99国产精品| 欧美视频一区二区三区| 欧美午夜宅男影院在线观看| 91久久精品日日躁夜夜躁国产| 久久国产日韩欧美| 亚洲狼人综合| 久久一区欧美| 国产一区二区三区高清播放| 一区二区三区在线视频免费观看| 亚洲视频中文| 亚洲国内精品在线| 亚洲午夜在线| 欧美精品一区在线观看| 悠悠资源网亚洲青| 亚洲伦伦在线| 欧美激情第三页| 亚洲免费视频一区二区| 麻豆精品传媒视频| 欧美成人免费在线观看| 亚洲一品av免费观看| 欧美激情亚洲精品| 在线观看一区| 一区二区日韩精品| 亚洲日本在线观看| 欧美黄污视频| 亚洲精品一区久久久久久| 欧美a级片网站| 亚洲欧美影院| 国产亚洲网站| 欧美成人午夜| 欧美日韩亚洲一区二区三区在线| 香蕉久久一区二区不卡无毒影院| 欧美一区二区三区视频在线 | 亚洲视频在线观看视频| 国产欧美一区二区精品性| 久久亚洲国产精品日日av夜夜| 久久久久久有精品国产| 99re6这里只有精品视频在线观看| 亚洲神马久久| 欧美xxx在线观看| 亚洲自拍偷拍福利| 在线国产精品一区| 一本久道久久综合中文字幕| 国产日韩欧美高清| 亚洲欧洲精品一区二区三区波多野1战4 | 亚洲精品欧美日韩专区| 国产精品久久久久久久久久直播| 久久亚洲欧洲| 国产精品久久久久久户外露出 | 亚洲视频福利| 亚洲激情偷拍| 欧美一级淫片aaaaaaa视频| 亚洲日产国产精品| 久久精品99国产精品酒店日本| 一区二区三区高清在线| 久久综合一区| 久久成人精品电影| 欧美性生交xxxxx久久久| 欧美大片一区二区| 国产午夜精品美女毛片视频| 亚洲精品中文字幕在线| 久久国产精品久久精品国产 | 欧美激情第8页| 国产一区二区三区的电影| 99热这里只有成人精品国产| 亚洲成人在线网站| 久久精品国产第一区二区三区最新章节| 亚洲四色影视在线观看| 欧美顶级艳妇交换群宴| 欧美成人国产一区二区| 国模私拍一区二区三区| 午夜精品久久久99热福利| 亚洲欧美国产精品桃花| 欧美日韩在线另类| 亚洲精品自在久久| 一本色道久久综合亚洲精品高清| 久久中文久久字幕| 久久亚洲不卡| 国产伦理一区| 亚洲一区欧美一区| 亚洲永久精品国产| 欧美日韩视频第一区| 亚洲黄色一区| 亚洲日本成人| 猛男gaygay欧美视频| 久久综合久久综合九色| 国产一区二区三区久久久久久久久| 宅男噜噜噜66一区二区66| 99re6热在线精品视频播放速度| 毛片一区二区三区| 欧美黄色小视频| 亚洲第一网站免费视频| 久久人人爽爽爽人久久久| 久久亚洲精品一区| ●精品国产综合乱码久久久久 | 亚洲福利视频网站| 美女黄毛**国产精品啪啪| 亚洲国产精品一区二区久| 99精品欧美一区二区蜜桃免费| 欧美日韩日本国产亚洲在线| 国产精品免费看片| 欧美亚洲一区| 免费不卡视频| 99riav1国产精品视频| 欧美日韩综合一区| 亚洲一区中文| 麻豆精品网站| 久久精品二区三区| 欧美一区亚洲一区| 国产日本欧洲亚洲| 狼狼综合久久久久综合网| 影音先锋久久| 欧美激情精品久久久久久大尺度| 妖精成人www高清在线观看| 欧美一区在线视频| 亚洲人成久久| 国产精品视频在线观看| 久久久蜜臀国产一区二区| 亚洲精品影视在线观看| 欧美一区二区三区另类| 亚洲第一天堂av| 国产精品video| 久久久久久久性| 99国产精品久久久久老师| 久久久久国产精品一区二区| 亚洲承认在线| 国产精品视区| 欧美精品激情在线| 欧美一区二区免费观在线| 亚洲福利视频在线| 欧美在线视频一区二区三区| 亚洲人成人一区二区在线观看 | 久久国产精品久久久久久| 亚洲国产视频直播| 国产嫩草一区二区三区在线观看 | 国产日韩精品在线观看| 美女91精品| 亚洲欧美日韩综合| 亚洲欧洲一区二区三区久久| 久久久噜噜噜久久狠狠50岁| 亚洲最新视频在线| 悠悠资源网亚洲青| 国产区精品在线观看| 欧美国产精品va在线观看| 香蕉精品999视频一区二区| 最近中文字幕日韩精品| 久久人人看视频| 欧美一区二区在线看| 一区二区日本视频| 日韩西西人体444www| 在线欧美日韩国产| 国产在线视频欧美一区二区三区| 国产精品福利av| 亚洲精品美女在线| 欧美成年人在线观看| 久久在线视频在线| 久久免费精品视频| 久久久精品一区| 欧美在线高清| 欧美一区二区视频观看视频| 亚洲永久在线| 午夜精品av| 欧美一级理论片| 欧美一级久久久| 欧美一区不卡| 久久狠狠婷婷| 久久免费视频在线| 久久激情视频久久| 久久久精品网| 美女国产一区| 欧美成人免费全部| 韩日精品在线| 久久久久亚洲综合| 久久精品一区| 麻豆国产精品va在线观看不卡| 久久免费视频一区| 巨胸喷奶水www久久久免费动漫| 欧美一区高清| 久久久精品日韩| 美女任你摸久久| 欧美日本在线| 国产精品乱码妇女bbbb| 国产麻豆成人精品| 狠狠88综合久久久久综合网| 在线观看91精品国产麻豆| 亚洲激情专区| 亚洲性视频网址| 欧美中日韩免费视频| 久久青青草原一区二区| 亚洲高清av| 一区二区三区你懂的| 午夜在线精品|