C++基礎(1)

        命名空間(namespace):通過命名空間來限制變量的作用域,通過這樣的作用域的限制,避免了命名上的衝突,函數和變量通過 命名空間的不同,會在內存中存儲的時候,形成不同的名字,這樣,就避免了各種各樣的命名衝突。

        輸入和輸出(cout <<    /    cin >>)C++的輸入和輸出,通過運算符來實現,但是因爲有命名空間的限制,所以在使用的時候,必須進行一個std命名空間的引用,通過::這個運算符來進行引用。輸出運算符cout<< ,輸入預算符cin >>,通過這兩個運算符進行輸入和輸出,因爲運算符具有重載的特性,所以這兩個運算符可以通用於各種數據類型。還有一個運算符是endl 這個運算符表示輸出一個換行符。

        缺省參數:缺省參數就是在函數傳遞值的過程中,有時候因爲函數的定義中已經有了給定的參數的數值,所以在函數傳參的過程中,這些參數可以缺省。但缺省的參數只能由右向左進行值的填充,也就是說,只有依次從左邊不空位置不對參數賦值,這樣,纔不會保證函數參數的二義性。當函數在執行的過程中,如果參數不夠,就會使用函數在定義的時候所給定的值進行計算。

        函數的重載:函數的重載就是同名同命名空間下函數根據參數列表的不同,對一個函數名進行了不同的實現方式,這樣,就是函數的重載。只能是參數列表不同,不能是函數的返回值不同,因爲函數在調用的時候,只能進行一個參數的傳遞,不能進行返回值類型的檢查,所以,不同的返回類型,但參數列表相同,不能算作函數的重載。

        名字修飾:在C/C++中,程序需要經歷一下階段:預處理、編譯、彙編、鏈接。

而名字修飾就是在編譯階段對函數變量的名字重新進行一個命名的過程,在程序的執行過程中,就是使用已經重新命名好的名字進行程序的運行。在C語言中,只是給函數和變量的名字加一個下劃線( _ ),就可以了,但是在C++中,因爲有了函數重載以及名字空間的卻別,所以有了更加複雜的命名空間。C++的名字修飾比較複雜,不同的編譯器有着不同的實行方式。

        extern "C" 這個命令是告訴編譯器,這個關鍵詞後的大括號內的代碼按照C語言的方式進行編譯,因爲在C++中,有着一些和C不同的編譯方式,所以爲了使C的代碼可以再cpp文件下通過編譯,採用此方式。

        引用(  int & A = B;)引用的其實就是一種指針的其他用法,可以看做,是一個常量指針,因爲引用只能在定義的時候進行賦值,並且也只能在定義的時候進行賦值,然後就一直指向着他所引用的對象,不能被改變。引用在使用的過程中,一個對象可以有多個引用,但是不能多級引用。引用在使用的時候,使用方法和變量一致,不需要進行類似指針的解引用,這使得應用在使用時,非常的方便,同時引用相比於指針。for循環後的括號由冒號“ :”分爲兩部分:第一部分是範圍內用於迭代的變量,第二 部分則表示被迭代的範圍。,具有很多好處:1.不能被改變 2.和指針類似,可以完成跨棧操作,效率高 3.因爲是直接進行變量的操作,不用擔心變量的地址越界 等很多優點,這使得引用的安全性得到了提高。  同時引用還可以使用常飲用,即使用const修飾的變量,也可以通過 一個const修飾的引用來定義一個常變量的引用。

        內聯函數(  inline ) 內聯函數和宏的作用一致,爲了避免函數壓棧是的開銷,所以在inline修飾的函數被調用的時候,編譯器會在調用函數的地方進行展開,不進行函數的壓棧操做。但是使用inline修飾的函數,和register一樣,僅僅是對編譯器的建議,編譯器可以根據函數的具體情況決定是否在函數的調用的位置進行展開,因爲當函數很大,或者當函數是遞歸的時候,展開的開銷太大,所以編譯器不會進行展開。

        auto關鍵詞(  auto  )auto關鍵詞的作用是修飾變量,當不知道進行賦值的變量是什麼類型是,可以使用auto修飾被賦值變量,這樣,被複制的變量會自動轉爲賦值變量的類型。這一系列操作是有編譯器在編譯時期推導而得。auto關鍵詞不能作爲函數參數列表的形參類型,也不能直接聲明數組。在使用auto關鍵詞時,如果遇到逗號表達式,即在同一行定義變量的時候,auto所起的作用僅僅是轉換爲第一個變量的類型,後面所跟的逗號所連接的變量都是按照一開始轉換好的類型進行類型替換。

        範圍for的循環:在C++11中,新引入了一種新的有範圍的集合的遍歷方法,這方法就是。for循環後的括號由冒號“ :”分爲兩部分:第一部分是範圍內用於迭代的變量,第二 部分則表示被迭代的範圍。通過這樣的方法,實現了範圍集合的遍歷。這種方法使用的時候,必須確定範圍是確定的。

        空指針值nullptr對也空指針,我們在C語言中,通過NULL或者是0 進行表示,但是在C++11中,又重新定義了一個nullptr的關鍵字,表示真正意義上的一各空指針。當定義一個空指針的時候,必須給着這個空指針賦值爲nullptr,如果給這個指針變量賦值NULL,或者 0 ,僅僅只是賦給了一個 ‘0’,而不是(*)0,這兩個是不一樣的。所以,在賦值的時候,就不能象C語言一樣,對對空指針賦值NULL了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章