c 學習筆記4

2021-10-19 09:52:03 字數 3218 閱讀 4516

@[toc]主要內容為以下兩部分

1.布林資料型別

2.列表初始化(部分)

這個資料型別在不同語言裡面的表現方式是不一樣的,尤其在c語言和c++裡布林資料型別表現方式有很大區別。

布林表示式

布林表示式的本質是一段**,其結果為「真(true)」或者「假(false)」。

我們可以通過關係運算得到布林值,關係運算(relational operation)符包括判等(==),判不等( !=)以及判斷大小(<=, >=, <, >)。

這裡的例子是乙個關係運算:

int a=

0, b=

;//c++11

3==a;

//false

b//false

3.2>=b;

//true

執行結果打在了對應行的注釋裡。

if(3

==a)

這個寫法是布林表示式作為if判斷的條件。

這裡可能與常見的寫法不同,將字面常量3放在了等號前面,而將變數a放在了後面,這是工程上常用的方式,這種方式可以避免我們將兩個等號遺漏了乙個寫成乙個等號,如果寫成了乙個等號編譯器會報錯。

邏輯運算也可以得到布林值,邏輯運算(logical operation)符包括:與(&&),或(||),非(!)

int  a=

, b;

//c++11

a&&b;

//false

b||18

;//ture

!a;//ture

執行結果打在了對應行的注釋裡。

while

(!a)

!a作為迴圈條件,由於a是0,轉為布林值是false,!a則是ture,因此迴圈體裡的**是一直執行的。

c++裡的布林型別

c++中提供了三個保留關鍵字:bool,true,false

在第26條編碼規範裡要求,布林變數或布林型別的函式,它的命名應該使用字首"is",例如:

bool ismybook;

bool isrunning=

;bool

isboy()

;

除了"is"字首表示的「是不是」,還有一些特殊情況,比如有沒有、能不能、可不可以等等關於布林型別表達的說法,例如:

bool

haslicense()

;bool

canwork()

;bool

shouldsort()

;

但大部分情況下還是使用"is"作為布林變數或布林函式的字首的。

布林型別與整型的轉換

布林型別與整型是可以轉換的,轉換的規則包括一下三點:

0和false之間可以相互轉換。

ture轉換為整數一定是1。

所有的非零整數轉換為布林值是都是ture。

#include

intmain()

return0;

}

這是乙個布林型別的示例,我們定義了乙個布林變數isalpha表明他是不是字元,然後我們給他賦值初值是false,然後用if條件做判斷,如果這個isalpha是flase,它的非就是ture,然後執行到分支體裡的兩條輸出語句。

這兩條輸出語句中,第一條實現輸出字串再輸出布林變數的值,第二條的std::boolalpha是乙個函式,作用是將後面的布林變數時按字元(ture/false)的方式輸出。

第39條編碼規範中指出,如果一行**太長想斷行的話,斷行必須很明顯。斷行應該在逗號或運算子後換行,新行要對齊。

std::cout << std::boolalpha <<

"isalpha=" << isalpha << std::endl;

例如示例中,我們在流輸出運算子後換行,換行之後,字串"isalpha="與上一行的std::boolalpha是對齊的,這種對齊方式讓我們更加清晰的看到行之間的關係。

列表初始化(list initialization)是c++11引入的乙個新的特徵,列表初始化是對變數、陣列以及物件進行初始化的一種方法。

c++11標準之前的初始化方法

int x =0;

inty(2

);charc(

'a')

;int arr=

;char s=

"hello"

;

對於普通的變數有兩種方法,一種是用等號去賦值,第二種是在變數後面加上乙個小括號,小括號裡面寫上初始化的值。

陣列的初始化也有兩種方法,一種是使用大括號將陣列要初始化的成員的值寫在括號裡,第二種專門針對字元陣列的初始化方法,使用雙引號。

c++11標準仍然支援這些初始化方法。

列表初始化是c++11的乙個新特性,「列表」是用花括號括起來的一些值。根據列表初始化所寫的位置,我們可以將它分成兩類:

直接列表初始化(direct list initialization)

拷貝列表初始化(copy list initialization)

直接列表初始化:

int x

;// x is 0;

int y

;// y is 1;

/* 陣列 */

int array1;

char s1[3]

;char s3[

];

拷貝列表初始化都會比直接列表初始化多乙個賦值:

int z =

;/* 陣列 */

int array2=

;char s2=

;char s4=

;char s5=

"aloha"

;//(省略花括號)

使用中可以互換,兩者只在一些特殊情況中有差別。

C 學習筆記 4

17 函式呼叫方式 stdcall 表示指定這個函式採用 stdcall 方式。這種呼叫方式有如下特徵 1 呼叫時,引數從右到左壓入堆疊。2 被呼叫的函式負責清除堆疊。3 編譯時函式名前加 在函式名後加 paralength 其中 paralength 為所有引數以位元組為單位的長度。如果不指定函式...

C 學習筆記 4

1.靜態方法和例項方法 用修飾符static 宣告的方法為靜態方法,不用修飾符static 宣告的方法為例項方法。不管類生成或未生成物件,類的靜態方法都可以被使用,使用格式為 類名.靜態方法名。靜態方法只能使用該靜態方法所在類的靜態資料成員和靜態方法。這是因為使用靜態方法時,該靜態方法所在類可能還沒...

c 網路程式設計學習筆記 4

chapter 3.併發設計空間 一 迴圈 併發及反應式伺服器 迴圈伺服器在處理後續請求之前,會完整地處理每乙個客戶請求。因此,在處理乙個請求時,迴圈伺服器要麼將其他請求排成佇列,要麼忽略它們。迴圈伺服器適合以下兩種服務 l短期服務 l不經常執行的服務 在內部,迴圈伺服器常常在 單程序 位址空間中執...