《逆襲進大廠》系列之C++篇No.131-140
本文源自于個人github倉庫:https://github.com/forthespada/InterviewGuide
github倉庫內有PDF版本下載方式,歡迎各位star、fork~
立志收錄計算機校招、社招面試最全面試八股文,無內鬼來點八股文~
131、全局變量和static變量的區(qū)別
1、全局變量(外部變量)的說明之前再冠以static就構成了靜態(tài)的全局變量。
全局變量本身就是靜態(tài)存儲方式,靜態(tài)全局變量當然也是靜態(tài)存儲方式。
這兩者在存儲方式上并無不同。這兩者的區(qū)別在于非靜態(tài)全局變量的作用域是整個源程序,當一個源程序由多個原文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。
而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域限于一個源文件內,只能為該源文件內的函數(shù)公用,因此可以避免在其他源文件中引起錯誤。
static全局變量與普通的全局變量的區(qū)別是static全局變量只初始化一次,防止在其他文件單元被引用。
2.static函數(shù)與普通函數(shù)有什么區(qū)別?
static函數(shù)與普通的函數(shù)作用域不同。盡在本文件中。只在當前源文件中使用的函數(shù)應該說明為內部函數(shù)(static),內部函數(shù)應該在當前源文件中說明和定義。
對于可在當前源文件以外使用的函數(shù)應該在一個頭文件中說明,要使用這些函數(shù)的源文件要包含這個頭文件。
static函數(shù)與普通函數(shù)最主要區(qū)別是static函數(shù)在內存中只有一份,普通靜態(tài)函數(shù)在每個被調用中維持一份拷貝程序的局部變量存在于(堆棧)中,全局變量存在于(靜態(tài)區(qū))中,動態(tài)申請數(shù)據(jù)存在于(堆)
132、 靜態(tài)成員與普通成員的區(qū)別是什么?
1) 生命周期
靜態(tài)成員變量從類被加載開始到類被卸載,一直存在;
普通成員變量只有在類創(chuàng)建對象后才開始存在,對象結束,它的生命期結束;
2) 共享方式
靜態(tài)成員變量是全類共享;普通成員變量是每個對象單獨享用的;
3) 定義位置
普通成員變量存儲在?;蚨阎?,而靜態(tài)成員變量存儲在靜態(tài)全局區(qū);
4) 初始化位置
普通成員變量在類中初始化;靜態(tài)成員變量在類外初始化;
5) 默認實參
可以使用靜態(tài)成員變量作為默認實參,
133、說一下你理解的 ifdef endif代表著什么?
1) 一般情況下,源程序中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是“條件編譯”。有時,希望當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。
2) 條件編譯命令最常見的形式為:
\#ifdef 標識符 程序段1 \#else 程序段2 \#endif
它的作用是:當標識符已經(jīng)被定義過(一般是用#define命令定義),則對程序段1進行編譯,否則編譯程序段2。
其中#else部分也可以沒有,即:
\#ifdef 程序段1 \#denif
3) 在一個大的軟件工程里面,可能會有多個文件同時包含一個頭文件,當這些文件編譯鏈接成一個可執(zhí)行文件上時,就會出現(xiàn)大量“重定義”錯誤。
在頭文件中使用#define、#ifndef、#ifdef、#endif能避免頭文件重定義。
134、隱式轉換,如何消除隱式轉換?
1、C++的基本類型中并非完全的對立,部分數(shù)據(jù)類型之間是可以進行隱式轉換的。所謂隱式轉換,是指不需要用戶干預,編譯器私下進行的類型轉換行為。很多時候用戶可能都不知道進行了哪些轉換
2、C++面向對象的多態(tài)特性,就是通過父類的類型實現(xiàn)對子類的封裝。通過隱式轉換,你可以直接將一個子類的對象使用父類的類型進行返回。在比如,數(shù)值和布爾類型的轉換,整數(shù)和浮點數(shù)的轉換等。某些方面來說,隱式轉換給C++程序開發(fā)者帶來了不小的便捷。C++是一門強類型語言,類型的檢查是非常嚴格的。
3、 基本數(shù)據(jù)類型 基本數(shù)據(jù)類型的轉換以取值范圍的作為轉換基礎(保證精度不丟失)。隱式轉換發(fā)生在從小->大的轉換中。比如從char轉換為int。從int->long。自定義對象 子類對象可以隱式的轉換為父類對象。
4、 C++中提供了explicit關鍵字,在構造函數(shù)聲明的時候加上explicit關鍵字,能夠禁止隱式轉換。
5、如果構造函數(shù)只接受一個參數(shù),則它實際
剩余60%內容,訂閱專欄后可繼續(xù)查看/也可單篇購買
- 本專欄成功幫助阿秀拿到字節(jié)跳動SP的offer,脫胎于個人秋招時期的筆記總結。其中收納C++(217道)、操作系統(tǒng)(62道)、計算機網(wǎng)絡(100道)、數(shù)據(jù)結構與算法、數(shù)據(jù)庫(MySQL、Redis)等高頻問答知識點。 - 本專欄適合于校招、社招等找工作黨,后來逐漸收錄一些學弟學妹的上岸經(jīng)驗和方法,歡迎訂閱,持續(xù)更新ing。