C 語法規則

2021-07-10 10:17:45 字數 2753 閱讀 1277

c++中的布林型別:布林型別只占用乙個bit ,但是如果連續定義多個布林型別時,編譯器可能會多個布林型別定義在一起。true  編譯器用1來表示。false  編譯器用0來表示。

將乙個其他型別的資料賦給布林型別變數:c++編譯器會將所有的非0的值轉換為true(1),將0 轉化為false(0)。

三木運算子? ::將乙個三目運算子作為左值: (a>b?a:b) = 3 c語言不支援(三目運算子返回乙個值),但在c++中支援(三目元算符返回變數)。    但是如果可能的返回值有乙個是常量值,那麼它就不能作為左值使用,如(a>b?1:b) = 3  非法。

引用:

c++中的引用:乙個已經定義的變數的別名。 type var , type & name = var; 普通引用在宣告時必須用其他的變數進行初始化。引用作為函式引數宣告時不進行初始化。

const修飾引用:const 使引用擁有唯讀屬性,但是變數本身還是原來的屬性。

當使用常量對const 引用進行初始化時,編譯器會給常量分配空間,並將引用名命名為這段空間的別名。不能給普通引用賦值為常量,但是可以給常引用賦值為常量。此時常引用是唯讀的,除了在定義時,不能給它賦值。因此用乙個常引用可以構成乙個唯讀的變數,如 const int & a = 10  a是乙個唯讀變數。

引用在c++的內部實現是乙個常指標:type & name   ßàtype* const name。因此引用擁有乙個4位元組的空間。

引用作為函式返回值:返回區域性變數的引用時,引用不能作為左值,也不能用它初始化其他引用,但是如果引用時靜態的或者全域性變數的引用時就可以。

c++函式探幽:

內聯函式:inline int function(…),  內聯函式可以替代巨集**片段,在編譯時將函式體直接替代函式被呼叫的地方,這樣就減少了普通函式被呼叫時 的開銷(壓棧,跳轉等),但是內聯函式本質上還是乙個函式,不同於巨集**片段。內聯函式宣告符inline 必須要和函式定義結合在一起,不能放在宣告處,否則編譯器忽略內聯請求。 雖然內聯函式省時省空間,但是編譯器不一定准許函式的內聯請求,當c++編譯器不允許內聯請求時會將內聯函式當做普通函式處理。 

預設引數:c++中可以在函式宣告時為引數提供乙個預設值,當函式呼叫時沒有提供這個引數的值,編譯器會自動用預設值代替。但是在函式定義時就不在指定預設引數值。預設引數有如下規則:

只有引數列表後面的部分引數才可以提供預設引數值,一但在乙個函式呼叫中開始使用預設引數,那麼這個引數後的所有引數都必須使用預設引數,因此從開始使用預設引數的使用開始都後面的引數都要提供預設引數,否則編譯器將報錯。總之,在函式宣告時,如果乙個引數開始提供預設引數,那麼後面的所有引數都要提供預設引數;在呼叫函式時,如果開始省略引數,那麼後面所有引數都使用預設引數。

函式佔位引數:佔位引數是在函式定義時只有型別宣告,沒有引數名宣告的引數。一般情況下函式體內部無法使用佔位引數。但是在呼叫時必須提供完整的引數個數。可以給佔位引數提供預設引數。意義:為函式的後續版本的擴充套件埋下伏筆;相容c語言中的不規範寫法。

函式過載:簡單來說函式過載就是用同乙個函式名來定義不同的函式。那編譯器是如何區分這些函式的呢?事實上,編譯器是通過引數列表來區分過載了的函式。即過載函式擁有不同的引數列表。不同的引數列表包括引數個數不同、引數型別不同、引數順序不同,即滿足上述三個條件之一就能構成過載函式。函式過載在建構函式中是非常有用的。

當函式預設引數遇上函式過載會發生什麼神奇的情況?假設這樣的情況:程式當中定義兩個過載函式,其中乙個函式有乙個預設引數,在主函式呼叫這個函式。能不能編譯過呢?

經過編譯器的驗證,當函式預設引數遇上函式過載,編譯時沒有問題的,但是呼叫時會發生函式二義性的錯誤。因此在程式中不能同時使用函式預設引數和函式過載。

編譯器呼叫過載函式的準則:

l  將所有的同名函式作為候選者

l  嘗試尋找可行的候選函式

& 精確匹配實參

& 通過預設引數匹配實參

& 通過預設型別轉換匹配實參

l  匹配失敗

& 最終找到的可行候選函式不唯一,出現二義性,編譯失敗

& 無法匹配所有候選者,函式未定義,編譯失敗

注意:過載函式與返回值型別沒有半毛錢關係。

當過載函式賦值給函式指標時發生:

1).根據過載規則挑選與函式指標引數列表一致的候選者

2).嚴格匹匹配候選者的函式型別與函式指標的函式型別

只有上述兩個不步驟都成功時才能匹配成功,成功呼叫正確的函式。

c 與c++互相呼叫:可以使用extern關鍵字強制讓c++編譯器對**使用c的方式進行編譯。如 extern  「c」

使用如下處理統一處理: __cplusplus 是c++編譯器內建的標準巨集定義,讓c**既可以通過c編譯器的編譯,也可以在c++ 編譯器中以c方式編譯。

#ifdef __cplusplus

extern  「c」

XML 語法規則

xml的語法規則非常簡單,同時也是非常嚴格的 它易於學習,易於使用。因此,開發能夠識別和處理xml的軟體也是非常容易的。xml文件使用自述式語法,並且,語法規則非常簡單。tove jani reminder don t forget me this weekend 文件的第一行 xml宣告 定義xm...

Markdown語法規則

這裡可以看到官方的 markdown 語法規則文件,當然,後文我也會用自己的方式,闡述這些語法在實際使用中的用法。mac 平台 windows ios web 平台 標題是每篇文章都需要也是最常用的格式,在 markdown 中,如果一段文字被定義為標題,只要在這段文字前加 號即可。一級標題 二級標...

JSON語法規則

1 語法規則 a.資料在名稱 值對中 b.資料由逗號分隔 c.大括號儲存物件 d.中括號儲存陣列 2 名稱 值對 name linduo 等價於 name linduo 3 json的值 a.數字 整數或浮點數 b.字串 雙引號中 c.邏輯值 true或false d.陣列 中括號 e.物件 大括號...