最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C 語(yǔ)言的fread 與 C++ 的 ifstream::read區(qū)別及設(shè)計(jì)理由

 更新時(shí)間:2026年04月17日 09:43:34   作者:丁金金_chihiro_修行  
本文對(duì)比了C語(yǔ)言fread與C++ ifstream::read的設(shè)計(jì)差異,指出C++設(shè)計(jì)哲學(xué)強(qiáng)調(diào)類(lèi)型安全、面向?qū)ο?、流式操作及異常處?read只負(fù)責(zé)低層字節(jié)傳輸,元素語(yǔ)義由更高層的運(yùn)算符重載處理,實(shí)現(xiàn)了職責(zé)分離,提高了代碼的可讀性和安全性,感興趣的朋友跟隨小編一起看看吧

C 語(yǔ)言的fread與 C++ 的ifstream::read區(qū)別及設(shè)計(jì)哲學(xué)

很多從 C 轉(zhuǎn)向 C++ 的開(kāi)發(fā)者會(huì)困惑:為什么 C++ 不直接沿用 C 的 fread 那種簡(jiǎn)潔的設(shè)計(jì),而要搞一套 ifstream::read?這兩者到底有什么本質(zhì)區(qū)別?本文將從接口形式、錯(cuò)誤處理、類(lèi)型安全、資源管理、擴(kuò)展性等角度深入分析,并解釋 C++ 設(shè)計(jì)選擇背后的原因。

1. 函數(shù)簽名對(duì)比

C 語(yǔ)言

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

C++ifstream::read

std::istream& read(char* s, std::streamsize n);
// 或者更精確地說(shuō):
std::basic_istream<CharT>& read(CharT* s, std::streamsize count);

第一眼區(qū)別

  • fread全局函數(shù),read成員函數(shù)
  • fread 參數(shù)包含元素大小 size 和元素個(gè)數(shù) nmemb;read 只接受字節(jié)數(shù) count。
  • fread 返回實(shí)際讀到的元素個(gè)數(shù);read 返回流對(duì)象的引用(*this),實(shí)際字節(jié)數(shù)需要通過(guò) gcount() 獲取。
  • fread 的緩沖區(qū)是 void*read 的緩沖區(qū)是 char*(需顯式轉(zhuǎn)換)。

2. 核心區(qū)別詳解

2.1 參數(shù)設(shè)計(jì):為什么一個(gè)用(size, nmemb),另一個(gè)直接用字節(jié)數(shù)?

方面C (fread)C++ (read)
設(shè)計(jì)意圖以“元素”為單位,強(qiáng)調(diào)數(shù)據(jù)類(lèi)型以“字節(jié)”為單位,流式無(wú)類(lèi)型
參數(shù)元素大小 + 元素個(gè)數(shù)字節(jié)數(shù)
返回值成功讀取的元素個(gè)數(shù)流引用,字節(jié)數(shù)需額外調(diào)用 gcount()
典型用法fread(arr, sizeof(int), 10, fp)ifs.read(reinterpret_cast<char*>(arr), 10*sizeof(int))

C 的設(shè)計(jì)理由

  • 直接對(duì)應(yīng)底層存儲(chǔ)概念:結(jié)構(gòu)體、數(shù)組等是自然的數(shù)據(jù)塊。
  • 返回值直接告訴你“讀了多少個(gè)完整結(jié)構(gòu)體”,便于部分讀取判斷。

C++ 的設(shè)計(jì)理由

  • read無(wú)格式輸入函數(shù),不應(yīng)該關(guān)心元素的語(yǔ)義。元素的概念應(yīng)由更高級(jí)的抽象(如 operator>>)提供。
  • 返回流引用是為了鏈?zhǔn)秸{(diào)用ifs.read(buf1, 10).read(buf2, 20);。
  • 字節(jié)數(shù)通過(guò) gcount() 獲得,將“實(shí)際讀了多少”與“調(diào)用本身”分離,使流狀態(tài)更清晰。

2.2 類(lèi)型安全:void*vschar*

  • C 的 void*:可以接收任何指針類(lèi)型,不需要強(qiáng)制轉(zhuǎn)換,但失去了類(lèi)型檢查。你甚至可以傳入 float* 然后按 size=2 讀,編譯器不會(huì)警告。
  • C++ 的 char*:要求顯式轉(zhuǎn)換(reinterpret_cast<char*>),這迫使程序員意識(shí)到“我正在把內(nèi)存當(dāng)作字節(jié)序列處理”。這種顯式性提高了代碼的可讀性和安全性。

2.3 錯(cuò)誤處理機(jī)制

C 風(fēng)格

size_t n = fread(buf, 1, 1024, fp);
if (n != 1024) {
    if (feof(fp)) { /* 文件尾 */ }
    else if (ferror(fp)) { /* 錯(cuò)誤 */ }
}

C++ 風(fēng)格

ifs.read(buf, 1024);
std::streamsize n = ifs.gcount();
if (ifs.eof()) { /* 文件尾 */ }
else if (ifs.fail()) { /* 邏輯錯(cuò)誤 */ }
else if (ifs.bad()) { /* 致命錯(cuò)誤 */ }

區(qū)別

  • C 使用獨(dú)立的狀態(tài)函數(shù)(feof、ferror),需要傳入 FILE*。
  • C++ 將狀態(tài)作為流對(duì)象的一部分,且區(qū)分 failbit(可恢復(fù))和 badbit(不可恢復(fù)),更精細(xì)。
  • C++ 可以開(kāi)啟異常模式:ifs.exceptions(std::ios::badbit);

2.4 資源管理(RAII)

// C:必須手動(dòng)關(guān)閉
FILE* fp = fopen("file", "rb");
if (fp) {
    fread(...);
    fclose(fp);  // 容易遺漏
}
// C++:析構(gòu)自動(dòng)關(guān)閉
std::ifstream ifs("file", std::ios::binary);
ifs.read(...);
// 離開(kāi)作用域自動(dòng)關(guān)閉

C++ 的 RAII 保證了文件資源一定會(huì)被釋放,即使發(fā)生異常也不會(huì)泄漏。

2.5 擴(kuò)展性與多態(tài)

  • C 的 fread 只能用于 FILE*,無(wú)法擴(kuò)展。
  • C++ 的 readstd::basic_istream 的成員,而 std::ifstream、std::istringstream、std::cin 都繼承自同一個(gè)基類(lèi),因此 read 可以用于任何輸入流(文件、字符串、標(biāo)準(zhǔn)輸入),實(shí)現(xiàn)了多態(tài)。
void readSome(std::istream& is, char* buf, int n) {
    is.read(buf, n);   // 可以是文件、stringstream、cin
}

3. 為什么 C++ 不直接采用 C 的fread設(shè)計(jì)?

原因一:類(lèi)型系統(tǒng)的差異

C++ 有更強(qiáng)的類(lèi)型系統(tǒng)和面向?qū)ο筇匦浴H绻苯诱瞻?fread,就會(huì)引入一個(gè)非成員函數(shù),操作 FILE* 這種不安全的指針。這與 C++ 的“通過(guò)對(duì)象調(diào)用成員函數(shù)”的習(xí)慣不符。

原因二:運(yùn)算符重載與流式抽象

C++ 的 I/O 流設(shè)計(jì)是可擴(kuò)展的:<<>> 可以自定義。如果 readfread 一樣返回元素個(gè)數(shù),就無(wú)法支持鏈?zhǔn)秸{(diào)用,破壞流式語(yǔ)法的統(tǒng)一性。

原因三:異常安全

C 的 fread 不涉及異常。C++ 的流設(shè)計(jì)允許拋出異常(如 badbit),而返回流引用可以安全地讓異常傳播。

原因四:避免類(lèi)型轉(zhuǎn)換陷阱

在 C 中,fread(&obj, sizeof(obj), 1, fp) 看起來(lái)很自然,但如果 obj 是帶有虛函數(shù)表(vtable)的 C++ 對(duì)象,直接這樣讀寫(xiě)是未定義行為(破壞對(duì)象模型)。C++ 的 read 強(qiáng)制使用 char*,提醒程序員這是“字節(jié)操作”,不應(yīng)直接用于非平凡可復(fù)制類(lèi)型。

原因五:更好的狀態(tài)分離

fread 混合了“讀取動(dòng)作”和“獲取結(jié)果”在一個(gè)函數(shù)里。C++ 將“實(shí)際讀取量”分離到 gcount(),使得流操作可以更靈活(比如在讀取后不立即檢查,而是統(tǒng)一檢查狀態(tài))。

4. 實(shí)際代碼對(duì)比

任務(wù):讀取一個(gè)整數(shù)數(shù)組,處理部分讀取

C 風(fēng)格

int arr[100];
FILE* fp = fopen("data.bin", "rb");
if (!fp) return 1;
size_t n = fread(arr, sizeof(int), 100, fp);
if (n < 100) {
    if (feof(fp)) printf("提前結(jié)束,讀了 %zu 個(gè)整數(shù)\n", n);
    else if (ferror(fp)) printf("讀取出錯(cuò)\n");
}
fclose(fp);

C++ 風(fēng)格

int arr[100];
std::ifstream ifs("data.bin", std::ios::binary);
if (!ifs) return 1;
ifs.read(reinterpret_cast<char*>(arr), sizeof(arr));
std::streamsize bytes = ifs.gcount();
if (bytes < sizeof(arr)) {
    if (ifs.eof()) std::cout << "提前結(jié)束,讀了 " << bytes / sizeof(int) << " 個(gè)整數(shù)\n";
    else if (ifs.fail()) std::cout << "邏輯錯(cuò)誤\n";
    else if (ifs.bad()) std::cout << "致命錯(cuò)誤\n";
}
// 自動(dòng)關(guān)閉

哪個(gè)更好?
C++ 版本雖然多了一行強(qiáng)制轉(zhuǎn)換,但類(lèi)型更清晰,資源自動(dòng)管理,且能區(qū)分 failbad。

5. 何時(shí)使用哪個(gè)?

場(chǎng)景推薦
純 C 項(xiàng)目fread
需要極致性能且完全控制緩沖區(qū)(如嵌入式)fread 或 POSIX read
C++ 項(xiàng)目,處理二進(jìn)制文件ifstream::read
需要多態(tài)輸入(文件、字符串、標(biāo)準(zhǔn)輸入)std::istream::read
讀取非平凡可復(fù)制類(lèi)型(如含 std::string 的類(lèi))都不行,需要序列化庫(kù)
需要異常安全C++ 流 + 異常模式

總結(jié)

C++ 不照搬 C 的 fread 設(shè)計(jì),是因?yàn)椋?/p>

  1. 面向?qū)ο?/strong>:read 作為成員函數(shù),支持多態(tài)和繼承。
  2. 類(lèi)型安全:強(qiáng)制 char* 轉(zhuǎn)換,避免誤用非平凡類(lèi)型。
  3. 流式風(fēng)格:返回流引用支持鏈?zhǔn)秸{(diào)用,與 <<、>> 一致。
  4. 精細(xì)的錯(cuò)誤狀態(tài):區(qū)分 eof、fail、bad。
  5. RAII:自動(dòng)資源管理,防止泄漏。
  6. 異常支持:可選的異常模式,適應(yīng)不同安全需求。

雖然從表面看,fread 似乎更簡(jiǎn)潔(一個(gè)函數(shù)搞定大小和個(gè)數(shù)),但 C++ 的設(shè)計(jì)在大型項(xiàng)目中更安全、更可維護(hù)。理解這些差異,能幫你寫(xiě)出更地道的 C++ 代碼。

為什么 C++ 的read不關(guān)心“元素”,而operator>>才關(guān)心?

你問(wèn)了一個(gè)很核心的設(shè)計(jì)問(wèn)題:為什么 C++ 的 read 函數(shù)不像 C 的 fread 那樣,直接傳入“元素大小”和“元素個(gè)數(shù)”,而只接受一個(gè)“字節(jié)數(shù)”?

這背后是 “無(wú)格式輸入”“格式化輸入” 的職責(zé)分離思想。

1. 什么是“無(wú)格式輸入”(Unformatted Input)?

無(wú)格式輸入就是:把文件或流當(dāng)作一個(gè)純粹的字節(jié)序列,不解釋這些字節(jié)的含義
它只管“把 N 個(gè)字節(jié)從流搬到內(nèi)存”,至于這些字節(jié)將來(lái)被解釋成 intdouble 還是結(jié)構(gòu)體,那是程序員自己的事。

C++ 的 istream::read 就是這樣一個(gè)字節(jié)搬運(yùn)工

// read 的原型(簡(jiǎn)化)
istream& read(char* buffer, streamsize count);

它只知道兩件事:

  • 往哪里放(buffer
  • 放多少字節(jié)(count

它不知道、也不關(guān)心這些字節(jié)將來(lái)會(huì)被當(dāng)成幾個(gè) int 或幾個(gè)結(jié)構(gòu)體。

2. 什么是“元素語(yǔ)義”?

“元素語(yǔ)義”是指:把一組字節(jié)看作一個(gè)邏輯單元,比如一個(gè) int(4 字節(jié))、一個(gè) double(8 字節(jié))或一個(gè) Student 結(jié)構(gòu)體。

C 的 fread 試圖在函數(shù)層面提供這種語(yǔ)義:

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
  • size 告訴你每個(gè)元素多大
  • nmemb 告訴你想讀幾個(gè)元素
  • 返回值告訴你實(shí)際讀到了幾個(gè)完整的元素

這看起來(lái)很貼心:一個(gè)函數(shù)同時(shí)做了“字節(jié)搬運(yùn)”和“元素計(jì)數(shù)”。

但問(wèn)題在于:這個(gè)“元素”的概念非常初級(jí),它只能處理連續(xù)、固定大小、平凡可復(fù)制的類(lèi)型。它無(wú)法處理:

  • 變長(zhǎng)類(lèi)型(如 std::string
  • 需要?jiǎng)討B(tài)內(nèi)存的類(lèi)型(如 std::vector
  • 需要特殊構(gòu)造/析構(gòu)的類(lèi)型

3. 為什么 C++ 要把“元素語(yǔ)義”從read中剝離?

原因 1:?jiǎn)我宦氊?zé)原則

read 只應(yīng)該負(fù)責(zé)最底層的字節(jié)傳輸,不應(yīng)越俎代庖去理解“元素”。
如果 read 也像 fread 那樣帶 sizenmemb,那么它就同時(shí)做了兩件事:

  1. 計(jì)算要讀的總字節(jié)數(shù) = size * nmemb
  2. 嘗試讀那么多字節(jié)
  3. size 去切分返回值

這違背了“一個(gè)函數(shù)只做一件事”的原則。C++ 將“元素計(jì)數(shù)”的工作留給程序員或更高層次的抽象(如 operator>>)。

原因 2:真正的“元素”概念應(yīng)該由類(lèi)型系統(tǒng)和運(yùn)算符重載提供

C++ 的 operator>> 才是處理“元素語(yǔ)義”的正確位置:

int x;
double y;
std::string s;
std::cin >> x >> y >> s;   // 每個(gè) >> 都理解自己操作的類(lèi)型
  • >> 知道如何讀取一個(gè) int(跳過(guò)空白,解析十進(jìn)制,處理符號(hào))
  • >> 知道如何讀取一個(gè) std::string(讀取單詞或整行,根據(jù)需要分配內(nèi)存)
  • 這些邏輯無(wú)法用一個(gè)統(tǒng)一的 (size, nmemb) 參數(shù)來(lái)表達(dá)。

如果 read 也模仿 fread(size, nmemb),那么:

  • 對(duì)于 int 可能沒(méi)問(wèn)題(size=4
  • 對(duì)于 std::string 就完全不可行(它的大小不固定,不能直接覆蓋內(nèi)存)

所以 C++ 的選擇是:把底層的字節(jié)流操作 (read) 和 高層的類(lèi)型感知操作 (>>) 徹底分開(kāi)。

4. 對(duì)比說(shuō)明:fread的“偽元素語(yǔ)義” vs C++ 的分層設(shè)計(jì)

場(chǎng)景:讀取 3 個(gè)int

C 風(fēng)格(fread)

int arr[3];
size_t n = fread(arr, sizeof(int), 3, fp);
if (n == 3) // 成功
  • 看起來(lái)方便,但假設(shè)你把 sizeof(int) 寫(xiě)錯(cuò)了,比如寫(xiě)成 sizeof(short),編譯器不會(huì)報(bào)錯(cuò),你會(huì)讀到混亂的數(shù)據(jù)。

C++ 風(fēng)格

int arr[3];
// 底層字節(jié)讀取
ifs.read(reinterpret_cast<char*>(arr), sizeof(arr));
std::streamsize bytes = ifs.gcount();
if (bytes == sizeof(arr)) // 成功
  • 或者用格式化輸入(更安全):
for (int i = 0; i < 3; ++i) {
    if (!(ifs >> arr[i])) break;
}

你看,在 C++ 中,read 并不試圖理解“3 個(gè) int”這個(gè)概念,它只知道“12 個(gè)字節(jié)”。而“3 個(gè) int”這個(gè)語(yǔ)義是由程序員自己維護(hù)的(通過(guò) sizeof(arr) 和循環(huán))。

場(chǎng)景:讀取一個(gè)結(jié)構(gòu)體

// C
struct Point { double x; double y; };
Point p;
fread(&p, sizeof(Point), 1, fp);   // 危險(xiǎn)!如果 Point 有虛函數(shù)或非平凡成員,UB
// C++ 
struct Point { double x; double y; };
Point p;
ifs.read(reinterpret_cast<char*>(&p), sizeof(p));  // 同樣危險(xiǎn),但強(qiáng)制轉(zhuǎn)換提醒了你

C++ 的強(qiáng)制轉(zhuǎn)換 reinterpret_cast<char*> 像是一個(gè)警示牌:“你在做危險(xiǎn)的原始內(nèi)存操作”。而 C 的 fread 沒(méi)有這個(gè)警示,看起來(lái)更“自然”,但隱藏了風(fēng)險(xiǎn)。

5. 總結(jié):職責(zé)分離的哲學(xué)

層級(jí)函數(shù)/操作職責(zé)是否理解“元素”?
最底層read / write搬運(yùn)字節(jié)序列
中間層用戶手動(dòng)計(jì)算字節(jié)數(shù)、除以 sizeof(T)把字節(jié)組織成元素否(由程序員完成)
高層operator>> / operator<<識(shí)別類(lèi)型、處理格式、分配內(nèi)存

C 的 fread 試圖把中間層的職責(zé)(元素計(jì)數(shù))也包攬進(jìn)來(lái),但這只能在極其簡(jiǎn)單、固定大小、平凡類(lèi)型的場(chǎng)景下工作。一旦遇到復(fù)雜類(lèi)型(變長(zhǎng)、動(dòng)態(tài)、非平凡),這個(gè)模型就崩塌了。

C++ 選擇不做這種不徹底的抽象,而是提供純粹的字節(jié)流操作 (read),然后把類(lèi)型感知的能力交給更強(qiáng)大的運(yùn)算符重載和模板機(jī)制 (operator>>)。這符合 C++ 的哲學(xué):不為你不需要的東西付出代價(jià),同時(shí)給高級(jí)抽象留出空間。

6. 用一句大白話總結(jié)

read 只管“把一串字節(jié)從 A 搬到 B”,它不關(guān)心這些字節(jié)是幾個(gè)整數(shù)還是半個(gè)結(jié)構(gòu)體。
想知道“我讀到了幾個(gè)完整的元素”,那是你(或者 operator>>)的事,不是 read 的事。

希望這個(gè)解釋能幫你理解為什么 C++ 的 read 不像 C 的 fread 那樣設(shè)計(jì)。如果你還有疑問(wèn),我們可以繼續(xù)探討具體的代碼示例。

到此這篇關(guān)于C 語(yǔ)言的fread 與 C++ 的 ifstream::read區(qū)別及設(shè)計(jì)理由的文章就介紹到這了,更多相關(guān)C 語(yǔ)言fread 與 C++ ifstream::read區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++讀寫(xiě)文件流實(shí)例程序講解

    c++讀寫(xiě)文件流實(shí)例程序講解

    這篇文章主要介紹了c++讀寫(xiě)文件流實(shí)例,大家參考使用吧
    2013-12-12
  • Qt項(xiàng)目實(shí)戰(zhàn)之方塊游戲的實(shí)現(xiàn)

    Qt項(xiàng)目實(shí)戰(zhàn)之方塊游戲的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了如何利用Qt實(shí)現(xiàn)簡(jiǎn)易的方塊游戲,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下
    2023-03-03
  • QT設(shè)計(jì)秒表功能(跑步計(jì)時(shí)器)

    QT設(shè)計(jì)秒表功能(跑步計(jì)時(shí)器)

    這篇文章主要為大家詳細(xì)介紹了QT設(shè)計(jì)秒表功能,跑步計(jì)時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++實(shí)現(xiàn)字符串類(lèi)型相互轉(zhuǎn)換的代碼示例

    C++實(shí)現(xiàn)字符串類(lèi)型相互轉(zhuǎn)換的代碼示例

    在C/C++編程中,字符串是非常基礎(chǔ)且常用的數(shù)據(jù)類(lèi)型,但是由于不同的編程語(yǔ)言或標(biāo)準(zhǔn)庫(kù)可能采用不同的字符串類(lèi)型,因此在不同的應(yīng)用場(chǎng)景下可能需要進(jìn)行字符串類(lèi)型的相互轉(zhuǎn)換,本文將介紹如何在C/C++中將char*,std::string,QString,CString/MFC?String相互轉(zhuǎn)換
    2023-06-06
  • c語(yǔ)言B樹(shù)深入理解

    c語(yǔ)言B樹(shù)深入理解

    B樹(shù)是為磁盤(pán)或其他直接存儲(chǔ)設(shè)備設(shè)計(jì)的一種平衡查找樹(shù),本文將詳細(xì)介紹c語(yǔ)言B樹(shù),需要的朋友可以參考下
    2012-11-11
  • C++ 實(shí)現(xiàn)線程安全的頻率限制器(推薦)

    C++ 實(shí)現(xiàn)線程安全的頻率限制器(推薦)

    這篇文章主要介紹了在 C++ 中實(shí)現(xiàn)一個(gè)線程安全的頻率限制器,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • C++中的指針常量、常量指針與常量指針常量詳解

    C++中的指針常量、常量指針與常量指針常量詳解

    本文深入解析了C++中指針與const的組合使用,包括指針常量、常量指針和常量指針常量三種類(lèi)型,下面就拉介紹一下這三種的使用與區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2026-01-01
  • C++實(shí)現(xiàn)LeetCode(9.驗(yàn)證回文數(shù)字)

    C++實(shí)現(xiàn)LeetCode(9.驗(yàn)證回文數(shù)字)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(9.驗(yàn)證回文數(shù)字),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言中的strlen()和sizeof()對(duì)比分析

    C語(yǔ)言中的strlen()和sizeof()對(duì)比分析

    這篇文章主要介紹了C語(yǔ)言中的strlen()和sizeof()區(qū)別對(duì)比,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • 代碼分析c++中string類(lèi)

    代碼分析c++中string類(lèi)

    本篇內(nèi)容通過(guò)詳細(xì)的源代碼詳細(xì)分析了C++中string類(lèi)的用法以及知識(shí)點(diǎn),有興趣的讀者們參考下。
    2018-03-03

最新評(píng)論

阿图什市| 曲周县| 乌兰察布市| 澎湖县| 宜都市| 兴文县| 韶山市| 苏州市| 安泽县| 台北县| 棋牌| 安图县| 巩留县| 乐山市| 陆丰市| 龙海市| 黑龙江省| 都兰县| 天门市| 连云港市| 集贤县| 甘肃省| 绵阳市| 彭水| 衡南县| 彩票| 明水县| 泾源县| 阿城市| 娄底市| 景洪市| 扬中市| 南通市| 肥城市| 建始县| 子洲县| 浠水县| 家居| 阿鲁科尔沁旗| 察雅县| 广汉市|