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

C++中五種類型轉(zhuǎn)換的深度對比與實(shí)踐指南

 更新時間:2025年11月07日 08:50:58   作者:云小逸  
本文檔旨在系統(tǒng)梳理C++中的5種類型轉(zhuǎn)換(C風(fēng)格轉(zhuǎn)換、static_cast、dynamic_cast、const_cast、reinterpret_cast),從語法、用途、安全性、適用場景等維度進(jìn)行全面對比,幫助開發(fā)者理解各類轉(zhuǎn)換的核心差異,規(guī)避使用風(fēng)險,選擇最優(yōu)轉(zhuǎn)換方案,需要的朋友可以參考下

文檔概述

目的

本文檔旨在系統(tǒng)梳理 C++ 中的 5 種類型轉(zhuǎn)換(C 風(fēng)格轉(zhuǎn)換、static_castdynamic_cast、const_castreinterpret_cast),從語法、用途、安全性、適用場景等維度進(jìn)行全面對比,幫助開發(fā)者理解各類轉(zhuǎn)換的核心差異,規(guī)避使用風(fēng)險,選擇最優(yōu)轉(zhuǎn)換方案。

背景

C 語言的類型轉(zhuǎn)換(如 (T)expr)語法簡潔但功能模糊,既可以轉(zhuǎn)換基本類型,也能強(qiáng)制轉(zhuǎn)換指針/引用,編譯器幾乎不做類型檢查,容易導(dǎo)致隱蔽錯誤且難以調(diào)試。為解決這一問題,C++ 擴(kuò)展了 4 種顯式類型轉(zhuǎn)換運(yùn)算符,每種都有明確的設(shè)計目標(biāo)和適用場景,提高了代碼的可讀性、可維護(hù)性和安全性。

一、5 種類型轉(zhuǎn)換詳解

1. C 風(fēng)格轉(zhuǎn)換(C-style Cast)

1.1 語法格式

// 兩種等價形式
(T)expression;    // 傳統(tǒng) C 風(fēng)格
T(expression);    // 函數(shù)式語法(C++ 兼容)

1.2 核心用途

兼容 C 代碼,支持任意類型的隱式/顯式轉(zhuǎn)換,包括:

  • 基本數(shù)據(jù)類型轉(zhuǎn)換(如 int ↔ double);
  • 指針/引用類型轉(zhuǎn)換(如 void* ↔ 具體類型指針、父子類指針互轉(zhuǎn));
  • 忽略 const/volatile 限定符的轉(zhuǎn)換。

1.3 轉(zhuǎn)換規(guī)則與特點(diǎn)

  • 編譯時轉(zhuǎn)換,無運(yùn)行時開銷;
  • 編譯器僅做最基本的語法檢查,不驗(yàn)證轉(zhuǎn)換的邏輯安全性;
  • 功能“一刀切”,無法區(qū)分轉(zhuǎn)換意圖(如“去除 const”和“父子類下行轉(zhuǎn)換”無法通過代碼區(qū)分);
  • 難以通過代碼搜索定位(相比 C++ 顯式轉(zhuǎn)換運(yùn)算符)。

1.4 代碼示例

// 1. 基本類型轉(zhuǎn)換(合法但可能丟失精度)
double pi = 3.14159;
int pi_int = (int)pi;          // C 風(fēng)格
int pi_int2 = int(pi);         // 函數(shù)式風(fēng)格(等價)

// 2. 指針類型轉(zhuǎn)換(不安全,無類型檢查)
void* void_ptr = π
int* int_ptr = (int*)void_ptr; // void* → int*(編譯通過,邏輯是否合法取決于實(shí)際指向)

// 3. 忽略 const 轉(zhuǎn)換(編譯通過,但修改會導(dǎo)致未定義行為)
const int num = 10;
int* mutable_num = (int*)#
*mutable_num = 20; // 未定義行為(num 本質(zhì)是 const 對象)

1.5 注意事項(xiàng)

  • 僅建議在兼容 C 代碼的場景下使用;
  • 指針/引用轉(zhuǎn)換極易導(dǎo)致內(nèi)存越界、類型錯誤等未定義行為(UB);
  • 無法被編譯器或靜態(tài)分析工具識別為“危險轉(zhuǎn)換”,調(diào)試難度大。

2. static_cast(靜態(tài)轉(zhuǎn)換)

2.1 語法格式

static_cast<TargetType>(expression);

2.2 核心用途

C++ 中最常用的類型安全轉(zhuǎn)換,適用于“邏輯上相關(guān)且編譯器可驗(yàn)證”的轉(zhuǎn)換:

  • 基本數(shù)據(jù)類型的顯式轉(zhuǎn)換(替代 C 風(fēng)格基本類型轉(zhuǎn)換);
  • 父子類指針/引用的上行轉(zhuǎn)換(Derived → Base,安全,編譯器可驗(yàn)證);
  • void 指針與具體類型指針的互轉(zhuǎn)(需手動確保安全性);
  • 隱式轉(zhuǎn)換的顯式化(如 char → int、非 const → const);
  • 枚舉類型與整數(shù)類型的互轉(zhuǎn)。

2.3 轉(zhuǎn)換規(guī)則與特點(diǎn)

  • 編譯時轉(zhuǎn)換,無運(yùn)行時開銷;
  • 編譯器會檢查轉(zhuǎn)換的“語法合法性”(如是否為相關(guān)類型),但不檢查“邏輯安全性”(如下行轉(zhuǎn)換的有效性);
  • 不能去除 const/volatile 限定符(需用 const_cast);
  • 不支持無關(guān)聯(lián)類型的指針轉(zhuǎn)換(如 int* → double*,編譯報錯)。

2.4 代碼示例

// 1. 基本類型轉(zhuǎn)換(安全,顯式聲明意圖)
double pi = 3.14159;
int pi_int = static_cast<int>(pi); // 顯式轉(zhuǎn)換,可讀性優(yōu)于 C 風(fēng)格

// 2. 父子類上行轉(zhuǎn)換(安全,編譯器驗(yàn)證繼承關(guān)系)
class Base {};
class Derived : public Base {};
Derived* derived_ptr = new Derived();
Base* base_ptr = static_cast<Base*>(derived_ptr); // 合法,Derived 是 Base 的子類

// 3. void* 與具體類型指針互轉(zhuǎn)
int num = 10;
void* void_ptr = static_cast<void*>(&num); // int* → void*(安全)
int* int_ptr = static_cast<int*>(void_ptr); // void* → int*(需確保原類型是 int)

// 4. 枚舉與整數(shù)互轉(zhuǎn)
enum Color { Red = 1, Green = 2 };
Color color = static_cast<Color>(2); // 整數(shù) → 枚舉
int color_val = static_cast<int>(color); // 枚舉 → 整數(shù)

2.5 注意事項(xiàng)

  • 父子類下行轉(zhuǎn)換(Base → Derived)編譯通過,但無運(yùn)行時檢查,若指針實(shí)際指向父類對象,會導(dǎo)致未定義行為;
  • 基本類型轉(zhuǎn)換可能丟失精度(如 double → int 截斷小數(shù)),需手動確保邏輯合理;
  • 不支持跨層級繼承的指針轉(zhuǎn)換(如爺爺類 → 孫子類,編譯報錯)。

3. dynamic_cast(動態(tài)轉(zhuǎn)換)

3.1 語法格式

dynamic_cast<TargetType>(expression);

3.2 核心用途

專門用于多態(tài)類的指針/引用轉(zhuǎn)換,核心場景:

  • 父子類指針/引用的下行轉(zhuǎn)換(Base → Derived,運(yùn)行時驗(yàn)證有效性);
  • 同一繼承體系中無直接父子關(guān)系的類指針/引用轉(zhuǎn)換(交叉轉(zhuǎn)換,如兄弟類轉(zhuǎn)換);
  • 空指針轉(zhuǎn)換(任何類型的空指針可轉(zhuǎn)換為目標(biāo)類型的空指針)。

3.3 轉(zhuǎn)換規(guī)則與特點(diǎn)

  • 運(yùn)行時轉(zhuǎn)換,依賴RTTI(運(yùn)行時類型信息),有輕微運(yùn)行時開銷;
  • 僅支持帶虛函數(shù)的類(多態(tài)類)的指針/引用轉(zhuǎn)換(否則編譯報錯);
  • 轉(zhuǎn)換成功返回目標(biāo)類型指針/引用,失敗時:
    • 指針轉(zhuǎn)換返回 nullptr
    • 引用轉(zhuǎn)換拋出 std::bad_cast 異常(需捕獲);
  • 不能去除 const/volatile 限定符;
  • 編譯器會檢查繼承關(guān)系,無關(guān)聯(lián)的類轉(zhuǎn)換直接編譯報錯。

3.4 代碼示例

#include <iostream>
#include <typeinfo> // 用于 std::bad_cast

class Base {
public:
    virtual void func() {} // 必須有虛函數(shù)(多態(tài)類)
};

class Derived : public Base {};
class Sibling : public Base {}; // 兄弟類

int main() {
    // 1. 下行轉(zhuǎn)換(成功場景)
    Base* base_ptr = new Derived(); // 實(shí)際指向 Derived 對象
    Derived* derived_ptr = dynamic_cast<Derived*>(base_ptr);
    if (derived_ptr != nullptr) {
        std::cout << "下行轉(zhuǎn)換成功" << std::endl;
    }

    // 2. 下行轉(zhuǎn)換(失敗場景)
    base_ptr = new Base(); // 實(shí)際指向 Base 對象
    derived_ptr = dynamic_cast<Derived*>(base_ptr);
    if (derived_ptr == nullptr) {
        std::cout << "下行轉(zhuǎn)換失敗,返回 nullptr" << std::endl;
    }

    // 3. 引用轉(zhuǎn)換(失敗拋異常)
    Base& base_ref = *new Base();
    try {
        Derived& derived_ref = dynamic_cast<Derived&>(base_ref);
    } catch (const std::bad_cast& e) {
        std::cout << "引用轉(zhuǎn)換失敗:" << e.what() << std::endl;
    }

    // 4. 交叉轉(zhuǎn)換(兄弟類轉(zhuǎn)換,成功)
    Sibling* sibling_ptr = dynamic_cast<Sibling*>(new Derived());
    if (sibling_ptr == nullptr) {
        std::cout << "兄弟類轉(zhuǎn)換失敗" << std::endl; // 輸出此句(Derived 不是 Sibling 子類)
    }

    return 0;
}

3.5 注意事項(xiàng)

  • 必須為多態(tài)類(含虛函數(shù)),否則編譯報錯;
  • 運(yùn)行時開銷來自 RTTI 類型檢查,高頻場景需謹(jǐn)慎使用;
  • 指針轉(zhuǎn)換后必須檢查是否為 nullptr,引用轉(zhuǎn)換需捕獲 std::bad_cast
  • 不支持基本數(shù)據(jù)類型轉(zhuǎn)換(編譯報錯)。

4. const_cast(常量轉(zhuǎn)換)

4.1 語法格式

const_cast<TargetType>(expression);

4.2 核心用途

僅用于修改類型的 const/volatile 限定符,不改變類型本身:

  • 去除 const 限定(最常用,如調(diào)用非 const 函數(shù)但參數(shù)是 const 對象);
  • 添加 const 限定(較少用,可直接隱式轉(zhuǎn)換);
  • 去除/添加 volatile 限定(底層編程場景)。

4.3 轉(zhuǎn)換規(guī)則與特點(diǎn)

  • 編譯時轉(zhuǎn)換,無運(yùn)行時開銷;
  • 目標(biāo)類型與源類型必須完全一致(僅 cv 限定符不同),否則編譯報錯;
  • 僅修改“編譯期的 cv 屬性”,不改變對象的“本質(zhì)常量性”(如 const int a = 10 是本質(zhì)常量,修改會導(dǎo)致 UB)。

4.4 代碼示例

#include <iostream>

void modify(int& x) {
    x = 100; // 非 const 函數(shù),修改參數(shù)
}

int main() {
    // 1. 去除 const 限定(對象非本質(zhì)常量,合法)
    int num = 20; // 非 const 對象
    const int* const_ptr = &num;
    int* mutable_ptr = const_cast<int*>(const_ptr);
    *mutable_ptr = 30;
    std::cout << num << std::endl; // 輸出 30(合法)

    // 2. 去除 const 限定(對象是本質(zhì)常量,修改導(dǎo)致 UB)
    const int const_num = 50; // 本質(zhì) const 對象
    int* bad_ptr = const_cast<int*>(&const_num);
    *bad_ptr = 60; // 未定義行為(可能輸出 50 或 60,取決于編譯器優(yōu)化)
    std::cout << const_num << std::endl;

    // 3. 引用去除 const(調(diào)用非 const 函數(shù))
    const int ref_num = 70;
    modify(const_cast<int&>(ref_num)); // 若 ref_num 是本質(zhì) const,修改 UB

    // 4. 添加 const 限定(合法,但可隱式轉(zhuǎn)換,較少用)
    int* ptr = &num;
    const int* const_ptr2 = const_cast<const int*>(ptr);

    return 0;
}

4.5 注意事項(xiàng)

  • 嚴(yán)禁修改“本質(zhì)常量對象”(如 const int a = 10),會導(dǎo)致未定義行為;
  • 僅用于“臨時去除 const 以調(diào)用非 const 函數(shù)”,且需確保對象實(shí)際可修改;
  • 不能用于類型轉(zhuǎn)換(如 const double → int,編譯報錯),僅修改 cv 限定符。

5. reinterpret_cast(重新解釋轉(zhuǎn)換)

5.1 語法格式

reinterpret_cast<TargetType>(expression);

5.2 核心用途

底層比特位重新解釋,適用于極端場景的類型轉(zhuǎn)換,主要用于:

  • 指針/引用與整數(shù)類型互轉(zhuǎn)(如 void* → uintptr_t,用于地址存儲);
  • 無關(guān)聯(lián)類型的指針/引用互轉(zhuǎn)(如 int* → double*,底層硬件交互);
  • 函數(shù)指針類型轉(zhuǎn)換(如 void(*)() → int(*)(),底層調(diào)用)。

5.3 轉(zhuǎn)換規(guī)則與特點(diǎn)

  • 編譯時轉(zhuǎn)換,無運(yùn)行時開銷;
  • 完全忽略類型安全,直接重新解釋內(nèi)存比特位;
  • 平臺依賴性極強(qiáng)(如指針大小、字節(jié)序影響轉(zhuǎn)換結(jié)果),移植性差;
  • 編譯器幾乎不做檢查,轉(zhuǎn)換結(jié)果完全由開發(fā)者保證合法性。

5.4 代碼示例

#include <cstdint> // 用于 uintptr_t

int main() {
    // 1. 指針與整數(shù)互轉(zhuǎn)(底層地址操作)
    int num = 0x12345678;
    int* ptr = &num;
    uintptr_t addr = reinterpret_cast<uintptr_t>(ptr); // 指針 → 整數(shù)(存儲地址)
    int* ptr2 = reinterpret_cast<int*>(addr); // 整數(shù) → 指針(恢復(fù)地址)
    std::cout << *ptr2 << std::endl; // 輸出 0x12345678(合法,需確保地址有效)

    // 2. 無關(guān)聯(lián)指針互轉(zhuǎn)(底層硬件交互場景)
    double pi = 3.14159;
    int* pi_int_ptr = reinterpret_cast<int*>(&pi); // double* → int*(重新解釋比特位)
    // *pi_int_ptr 的值是 pi 的二進(jìn)制比特位按 int 解析的結(jié)果,與平臺相關(guān)

    // 3. 函數(shù)指針轉(zhuǎn)換(底層調(diào)用場景)
    void func() { std::cout << "func called" << std::endl; }
    typedef int (*FuncType)();
    FuncType func_ptr = reinterpret_cast<FuncType>(func);
    // func_ptr(); // 未定義行為(返回值類型不匹配)

    return 0;
}

5.5 注意事項(xiàng)

  • 最危險的轉(zhuǎn)換,僅在底層編程(如硬件驅(qū)動、序列化、內(nèi)存池)中使用;
  • 轉(zhuǎn)換結(jié)果依賴平臺(如 32 位/64 位指針大小不同),移植性差;
  • 嚴(yán)禁用于普通業(yè)務(wù)邏輯,極易導(dǎo)致內(nèi)存錯誤、類型混淆等 UB;
  • 函數(shù)指針轉(zhuǎn)換后調(diào)用,若參數(shù)/返回值類型不匹配,會導(dǎo)致棧破壞。

二、5 種類型轉(zhuǎn)換對比總表

轉(zhuǎn)換類型轉(zhuǎn)換時機(jī)核心用途安全性支持 cv 轉(zhuǎn)換依賴條件運(yùn)行時開銷可調(diào)試性
C 風(fēng)格轉(zhuǎn)換編譯時兼容 C 代碼,任意類型轉(zhuǎn)換極低(無檢查)支持無(語法合法即可)
static_cast編譯時基本類型轉(zhuǎn)換、上行轉(zhuǎn)換、void* 轉(zhuǎn)換中等(語法檢查)不支持類型相關(guān)(如繼承關(guān)系)
dynamic_cast運(yùn)行時多態(tài)類下行轉(zhuǎn)換、交叉轉(zhuǎn)換高(RTTI 檢查)不支持多態(tài)類(含虛函數(shù))有(輕微)極好
const_cast編譯時修改 const/volatile 限定符中等(需確保對象可修改)僅支持 cv 轉(zhuǎn)換目標(biāo)與源類型一致(僅 cv 不同)
reinterpret_cast編譯時底層比特位重新解釋(指針/整數(shù)、無關(guān)聯(lián)指針)極低(比特位直接轉(zhuǎn))不支持無(完全依賴開發(fā)者)極差

三、最佳實(shí)踐與常見誤區(qū)

3.1 選型原則(優(yōu)先級從高到低)

  1. 優(yōu)先使用 C++ 顯式轉(zhuǎn)換(static_cast/dynamic_cast/const_cast),拒絕 C 風(fēng)格轉(zhuǎn)換;
  2. 基本類型轉(zhuǎn)換、上行轉(zhuǎn)換 → 用 static_cast;
  3. 多態(tài)類下行轉(zhuǎn)換 → 用 dynamic_cast(必須檢查結(jié)果);
  4. 需修改 cv 限定符 → 用 const_cast(僅臨時使用,不修改本質(zhì)常量);
  5. 底層比特位操作 → 用 reinterpret_cast(盡量避免,僅底層場景)。

3.2 常見誤區(qū)

  1. 用 static_cast 做父子類下行轉(zhuǎn)換:無運(yùn)行時檢查,若指針指向父類對象,會導(dǎo)致 UB;
  2. 用 const_cast 修改本質(zhì)常量對象:如 const int a = 10,修改后行為未定義;
  3. 濫用 reinterpret_cast 做普通類型轉(zhuǎn)換:如 int* → double*,移植性差且易出錯;
  4. 忽略 dynamic_cast 的失敗處理:指針轉(zhuǎn)換后未檢查 nullptr,引用轉(zhuǎn)換未捕獲異常;
  5. 用 C 風(fēng)格轉(zhuǎn)換隱藏轉(zhuǎn)換意圖:如 (Derived*)base_ptr 無法區(qū)分是 static_cast 還是 reinterpret_cast,可讀性差。

3.3 調(diào)試建議

  • 用靜態(tài)分析工具(如 Clang-Tidy、VS 代碼分析)檢測危險轉(zhuǎn)換(如 C 風(fēng)格轉(zhuǎn)換、reinterpret_cast);
  • dynamic_cast 失敗時,通過 nullptr 檢查(指針)或 std::bad_cast 捕獲(引用)定位問題;
  • 避免在性能敏感場景(如循環(huán))使用 dynamic_cast,可通過類型標(biāo)記替代 RTTI 檢查。

四、總結(jié)

C++ 的 5 種類型轉(zhuǎn)換各有明確分工:

  • static_cast 是“日常首選”,平衡簡潔性與安全性;
  • dynamic_cast 是“多態(tài)安全衛(wèi)士”,犧牲少量性能換取類型安全;
  • const_cast 是“臨時解鎖工具”,僅用于修改 cv 限定符;
  • reinterpret_cast 是“底層專屬工具”,極端場景下謹(jǐn)慎使用;
  • C 風(fēng)格轉(zhuǎn)換是“兼容遺留”,新代碼中應(yīng)徹底摒棄。

合理選擇類型轉(zhuǎn)換,既能保證代碼的正確性,也能提升可讀性和可維護(hù)性。核心原則是:明確轉(zhuǎn)換意圖,依賴編譯器檢查,規(guī)避未定義行為

以上就是C++中五種類型轉(zhuǎn)換的深度對比與實(shí)踐指南的詳細(xì)內(nèi)容,更多關(guān)于C++五種類型轉(zhuǎn)換的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 帶你了解C++的IO流

    帶你了解C++的IO流

    這篇文章主要介紹了C++ IO流的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-09-09
  • vscode中配置LeetCode插件的教程(愉快刷題)

    vscode中配置LeetCode插件的教程(愉快刷題)

    這篇文章主要介紹了vscode中配置LeetCode插件的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-03-03
  • C++實(shí)現(xiàn)基數(shù)排序的方法詳解

    C++實(shí)現(xiàn)基數(shù)排序的方法詳解

    本篇文章是對使用C++實(shí)現(xiàn)基數(shù)排序的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++11中alignof和alignas的入門

    C++11中alignof和alignas的入門

    C++11引入alignof和alignas,用于控制內(nèi)存對齊,alignof查詢類型對齊要求,alignas指定最小對齊值,幫助優(yōu)化性能、實(shí)現(xiàn)跨平臺兼容,具有一定的參考價值,感興趣的可以了解一下
    2025-06-06
  • c語言的指針數(shù)組詳解

    c語言的指針數(shù)組詳解

    這篇文章主要為大家介紹了c語言的指針數(shù)組,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++中std::count函數(shù)介紹和使用場景

    C++中std::count函數(shù)介紹和使用場景

    std::count函數(shù)是一個非常實(shí)用的算法,它可以幫助我們快速統(tǒng)計給定值在指定范圍內(nèi)的出現(xiàn)次數(shù),本文主要介紹了C++中std::count函數(shù)介紹和使用場景,感興趣的可以了解一下
    2024-02-02
  • linux 匿名管道實(shí)例詳解

    linux 匿名管道實(shí)例詳解

    這篇文章主要介紹了linux 匿名管道實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • C語言進(jìn)階之文件操作詳解

    C語言進(jìn)階之文件操作詳解

    這篇文章主要為大家詳細(xì)介紹了C語言進(jìn)階之文件操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Qt實(shí)現(xiàn)文本編輯器(一)

    Qt實(shí)現(xiàn)文本編輯器(一)

    在Qt中QMainWindow是一個為用戶提供主窗口程序的類,包含了:菜單欄、工具欄、錨接部件、狀態(tài)欄以及一個中部件。本文將利用QMainWindow制作一個文本編輯器,感興趣的可以試一試
    2022-01-01
  • Matlab實(shí)現(xiàn)多子圖同步調(diào)整視角

    Matlab實(shí)現(xiàn)多子圖同步調(diào)整視角

    這篇文章主要為大家介紹了如何利用Matlab實(shí)現(xiàn)多子圖同步調(diào)整視角,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下
    2022-03-03

最新評論

波密县| 渭南市| 彭水| 和平区| 龙胜| 大英县| 许昌市| 辉南县| 太和县| 西和县| 连江县| 金华市| 开封县| 德兴市| 景德镇市| 安塞县| 双流县| 高密市| 德清县| 武川县| 渭南市| 乐山市| 寿阳县| 富民县| 昭平县| 谢通门县| 嵊泗县| 甘谷县| 福清市| 永安市| 镇雄县| 郸城县| 凤山市| 甘孜县| 中西区| 齐河县| 滨州市| 游戏| 东阿县| 湛江市| 正蓝旗|