第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

使用nullptr有什么優(yōu)勢(shì)?

使用nullptr有什么優(yōu)勢(shì)?

C++
慕田峪4524236 2019-10-24 10:35:14
這段代碼在概念上對(duì)三個(gè)指針(安全指針初始化)執(zhí)行相同的操作:int* p1 = nullptr;int* p2 = NULL;int* p3 = 0;那么,分配指針nullptr比給它們分配值NULLor有0什么好處?
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

在該代碼中,似乎沒有優(yōu)勢(shì)。但是請(qǐng)考慮以下重載函數(shù):


void f(char const *ptr);

void f(int v);


f(NULL);  //which function will be called?

將調(diào)用哪個(gè)函數(shù)?當(dāng)然,這里的意圖是打電話f(char const *),但實(shí)際上f(int)會(huì)打電話!那是個(gè)大問題1,不是嗎?


因此,解決此類問題的方法是使用nullptr:


f(nullptr); //first function is called

當(dāng)然,這并不是的唯一優(yōu)勢(shì)nullptr。這是另一個(gè):


template<typename T, T *ptr>

struct something{};                     //primary template


template<>

struct something<nullptr_t, nullptr>{};  //partial specialization for nullptr

由于在模板中,的類型nullptr推導(dǎo)為nullptr_t,因此您可以這樣編寫:


template<typename T>

void f(T *ptr);   //function to handle non-nullptr argument


void f(nullptr_t); //an overload to handle nullptr argument!!!

1.在C ++中,NULL定義為#define NULL 0,所以基本上是int,這就是為什么f(int)要調(diào)用它。


查看完整回答
反對(duì) 回復(fù) 2019-10-24
?
波斯汪

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊

這里的真正動(dòng)機(jī)是完美的轉(zhuǎn)發(fā)。


考慮:


void f(int* p);

template<typename T> void forward(T&& t) {

    f(std::forward<T>(t));

}

int main() {

    forward(0); // FAIL

}

簡(jiǎn)而言之,0是一個(gè)特殊值,但是值不能通過僅系統(tǒng)類型傳播。轉(zhuǎn)發(fā)功能是必不可少的,0不能處理它們。因此,絕對(duì)有必要引入nullptr,其中類型是特殊的,并且類型確實(shí)可以傳播。實(shí)際上,MSVC團(tuán)隊(duì)nullptr在實(shí)施右值引用之后必須提前引入,然后自己發(fā)現(xiàn)此陷阱。


還有一些其他情況nullptr可以使生活更輕松-但這不是核心問題,因?yàn)檠輪T可以解決這些問題??紤]


void f(int);

void f(int*);

int main() { f(0); f(nullptr); }

調(diào)用兩個(gè)單獨(dú)的重載。另外,考慮


void f(int*);

void f(long*);

int main() { f(0); }

這是模棱兩可的。但是,使用nullptr,您可以提供


void f(std::nullptr_t)

int main() { f(nullptr); }


查看完整回答
反對(duì) 回復(fù) 2019-10-24
  • 3 回答
  • 0 關(guān)注
  • 498 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)