精品国产精品自拍_在线日韩中文字幕_久久综合久久99_日韩一卡二卡三卡国产欧美

您的位置:首頁 >熱訊 > 資訊 >

C++面試八股文:技術勘誤

不知不覺,《C++面試八股文》已經更新30篇了,這是我第一次寫技術博客,由于個人能力有限,出現了不少紕漏,在此向各位讀者小伙伴們致歉。

為了不誤導更多的小伙伴,以后會不定期的出勘誤文章,請各位小伙伴留意。


【資料圖】

在《C++面試八股文:C++中,設計一個類要注意哪些東西?》一文中,

#include struct Foo{};struct Goo{    void f1(Foo& f){std::cout <<"non const function" << std::endl;}    void f1(const Foo& f){std::cout <<"const function" << std::endl;}};int main(int argc, char const *argv[]){    Foo foo;    Goo goo;    goo.f1(foo);    //無法通過編譯,error: ‘void Goo::f1(Foo)’ cannot be overloaded with ‘void Goo::f1(Foo)’    return 0;}

這里的例子f1f2方法的參數應該是Foo fconst Foo f,這才是頂層const。在此感謝知乎用戶 退乎 的提醒。

在《C++面試八股文:std::string是如何實現的?》一文中,

有std::string重載的相關問題,我已經在 技術勘誤:《C++面試八股文:std::string是如何實現的?》 一文中做了詳細說明,在此再次感謝知乎用戶 莊嚴 的指正。

在《C++面試八股文:override和finial關鍵字有什么作用?》一文中,final 誤拼為 finial,感謝知乎用戶 DiaoYan 的指正。

同時,這張內存布局圖也有錯誤,

應該是這樣的:

感謝知乎用戶 清越 的指正。

在《C++面試八股文:std::vector了解嗎?》一文中,

面試官:push_backemplace_back有什么區別?

除了文中所說的不同點,還要一點:emplace_back可以傳入構造函數構造對象,而push_back只能拷貝或移動對象。

感謝知乎用戶 選擇公理 的指正。

在《C++面試八股文:std::vector和std::list,如何選擇?》一文中,

以下代碼的輸出是什么?

#include #include int main(int argc, char const *argv[]){    std::list li = {1,2,3,4,5,6};    for(auto it = li.begin(); it!= li.end(); ++it)    {        if(0 == *it % 2) li.erase(it);    }    for(auto& i : li) std::cout << i << " ";    std::cout << std::endl;}

這里給出的答案是有問題的:

erase函數返回下一個有效迭代器,所以可以把if(0 == *it % 2) li.erase(it)修改為if(0 == *it % 2) it = li.erase(it)來解決這個問題。

這里的erase返回的是下一個迭代器,然后++就是下下個迭代器,跳過了下個迭代器。但是上面代碼中%2 == 0 也會跳過下個奇數,所以無法暴露這個問題。應該改成:

#include #include int main(int argc, char const *argv[]){    std::list li = {1,2,3,4,5,6};    auto it = li.begin();    while(it!= li.end())    {        if(0 == *it % 2)         {            it = li.erase(it);        }else{            ++it;        }    }    for(auto& i : li) std::cout << i << " ";    std::cout << std::endl;}

感謝知乎用戶 潸然 的指正。

在《C++面試八股文:什么是構造函數?》一文中,

面試官:可以使用virtual修飾構造函數嗎?

二師兄:不可以,因為構造函數在對象構造階段調用,虛表尚未建立,所以無法調用虛函數實現多態。

這里的描述是有問題的,虛表是在編譯期生成,在構造函數執行時,可能還沒有被初始化。所以無法調用虛函數實現多態。

感謝知乎用戶 handsome奶酪 的指正。

在《C++面試八股文:什么是空指針/野指針/懸垂指針?》一文中,

面試官:你知道0/NULL/nullptr三者之間的區別嗎?

二師兄:雖然三者都能定義空指針,但三者類型不同。

二師兄:0int類型,NULL在g++下是一個宏定義,而nullptr是有類型的;

#define NULL ((void *)0)

這里的定義也是有問題的,完整的定義如下:

#if defined (_STDDEF_H) || defined (__need_NULL)#undef NULL /* in case  has defined it. */#ifdef __GNUG__#define NULL __null#else /* G++ */#ifndef __cplusplus#define NULL ((void *)0)#else /* C++ */#define NULL 0#endif /* C++ */#endif /* G++ */#endif /* NULL not defined and  or need NULL. */#undef __need_NULL

GCC11下,是 __null, 類型是long。所以sizeof(NULL) == 8

再再再次感謝 莊嚴 大佬的指正。

感謝小伙伴們的的反饋,這對我來說非常寶貴。不僅幫助我改正了文章中的錯誤,也讓我有機會更新和修正自己的知識儲備庫。

C++的標準繁雜,不同版本的標準可能有所出入。同時不同編譯器對標準的實現也不盡相同,這增加了C++學習者的負擔。

前路坎坷,吾輩不可因為荊棘密布望而卻步。

關注我,帶你21天“精通”C++!(狗頭)

關鍵詞:

主站蜘蛛池模板: 国产精品免费久久久| 久久久精品国产网站| 欧美激情亚洲自拍| 精品无码久久久久久久动漫| www日韩av| 国产日本欧美视频| 久久riav二区三区| 国产精品免费网站| 一区二区视频国产| 国产精品一香蕉国产线看观看| 欧美精品免费观看二区| 国产尤物av一区二区三区| 国产精品自产拍在线观看中文| 精品国产一区二区三区在线观看| 欧美二区在线| 国产精品一区二区三区观看 | 欧美最猛性xxxxx(亚洲精品)| 一本久久a久久精品vr综合| 色综合久久天天综线观看| 国产精品亚洲a| 日韩欧美一区二区三区四区五区 | 欧美尤物巨大精品爽| 国产精品自产拍在线观看中文| 亚洲综合精品一区二区| 日本一区二区三区免费看| 国产美女精品免费电影| 97久久国产亚洲精品超碰热| 日韩免费中文字幕| 国产尤物91| 久久亚洲免费| 日本久久久久久| 国产精品美女在线观看| 日韩最新av在线| 国产精品一区二区三区观看| 欧洲精品在线一区| 国产精品网红直播| 琪琪亚洲精品午夜在线| 国产精品自拍首页| 久久国产精品99久久久久久丝袜 | 日韩高清国产精品| 丝袜亚洲欧美日韩综合|