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...