C++11 指針類型與賦值

不能用類型不匹配的指針來完成賦值,如下代碼是錯的:

int i = 0;
double *dp = &i;    // 非法,類型不匹配

但是 void* 可用于存放任意對象的地址:

int i = 42;
void *p = &i;    // 合法

還有特殊字面值 nullptr,可以轉(zhuǎn)換成任意其它的指針類型,用來判斷指針是否指向了一個合法的對象。

如果一定要完成指針的類型轉(zhuǎn)換,可以使用 C++11 的幾種強(qiáng)制類型轉(zhuǎn)換:

  1. 指針類型轉(zhuǎn)換 (reinterpret_cast)
int *pint = 1;
char *pch = reinterpret_cast<char *>(pint);
  1. 涉及到 const 的指針類型轉(zhuǎn)換 (const_cast)
const int num[5] = { 1,2,3,4,5 };
const int *p = num;
int *pint = const_cast<int *>(p);
  1. 子類指針轉(zhuǎn)化為父類指針 (dynamic_cast)
class man {
public:
    int name;
    // 加上 virtual 關(guān)鍵字, 可以使得父類用子類初始化后可以調(diào)用子類的函數(shù)
    virtual void run() {
        cout << "man is running" << endl;
    }
};

class son : public man {
public:
    void run() {
        cout << "son is running" << endl;
    }
};

void main()
{
    man *pman = new man;
    son *pson = new son;
    //子類指針轉(zhuǎn)換為父類指針, 但是還是調(diào)用子類的函數(shù)
    man *pfu = dynamic_cast<man *>(pson);
    pfu->run();
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容