@[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不經常執行的服務 在內部,迴圈伺服器常常在 單程序 位址空間中執...