C 11為什麼引入nullptr?

時間 2021-05-30 21:06:53

1樓:徐辰

因為C++他爹早就看0這個magic number不爽了,當年沒顧上搞,一直拖到2023年了,再不瘋狂一把C++就沒人用了。

2樓:enpeng xu

問題的關鍵是c++不知道怎麼正確做void * 到 T *的預設轉換,所以多此一舉的引入了nullptr。

某些情況做下c++編譯器不知道怎麼把(void *)ptr正確對映到某個class ptr上,這個可以理解,但是編譯器完全可以考慮NULL這個特殊情況,NULL的情況下只需要compiler做初始化指令而跳過型別轉換動作. nullptr才是真正醜陋的東西,應該再接著搞個nullref,然後nullrefptr, nullptrref, nullptrptrptrptr....

3樓:嘟嘟雞

因為過載函式處理 NULL 的時候會出問題void

foo(

int);

//(1)

void

foo(

void*);

//(2)

foo(

NULL

);// 過載決議選擇 (1),但呼叫者希望是 (2)有趣的是 std::nullptr_t 的定義typedef

decltype

(nullptr

)nullptr_t

;// 通過字面量反過來定義型別

為什麼 C 11 之前,std vector resize 要傳遞值,而不是常引用?

如果沒有優化,傳值可能更快一些,值能進register。而引用,相當於指標。數學函式,比如abs,exp這些,都是傳值的。 或許是考慮到可能用原來vector的某個元素來resize,比如vector.resize 1,vector 99 這種情況下引用可能失效,需要在操作前先拷貝一次。反正都要拷貝...

c 11中std unique ptr需要明確知道型別的析構函式,而shared ptr不需要?

土地測量員 詳細講一下std unique ptr的部分吧。std unique ptr需要明確知道型別的析構函式 unique ptr型別是 template class T,class Deleter std default delete class unique ptr private T p...

C 11 模板引數推導(Template Argument Deduction)是如何工作的?

electrlife 關於模版推導,借題主地盤,請教下如下情況如何理解?template class MyVector private T aa int main int argc,const char argv 這裡本意是請問 push back 的const 在推導過程是不是會重複const c...