C 中 (問號)相關語法糖

2021-10-03 09:09:39 字數 1361 閱讀 4928

c#中與"?"(問號有關的語法糖大概有這幾個:??、 ?、 ?.、?[ ] 、?: ,在文章《c#中 ??、 ?、 ?: 、?.、?[ ] 問號》中已經有詳細說明。總結來看,除了?:這個三元(運算子)表示式外,都是和是否空有關。但文章中對?未做更多描述,所以在這裡做個補充。看看下面的栗子:

string

arr =

null

;console.

writeline

(arr[0]

);

上面**將報錯:「unhandled exception. system.nullreferenceexception: object reference not set to an instance of an object.」

string

arr =

null

;console.

writeline

(arr?[0

]);

那麼上面**不會報錯,而是輸出空白。

string

arr = array.

empty

<

string

>()

;console.

writeline

(arr?[0

]);

那麼上面**依舊會報錯:「system.indexoutofrangeexception:「index was outside the bounds of the array.」」。也就是"?"只能判斷某個值是否為null,而無法判斷是否是空陣列。

int?[

] arr =

newint?[

5];arr[1]

=99;arr[3]

=321

;foreach

(int

? i in arr)

輸出是什麼?

99

321

如果把"?"去掉,其餘不變,也就是這樣:

int

arr =

newint[5

];

那麼輸出是什麼?

0990

3210

所以,本質上"?「都是判斷是否為null。對於上面的例子,如果不加」?",那麼對於int 這樣的陣列,即便不做初始化,系統也會自動給預設值,而這很容易造成錯誤——因為你不知道陣列中這個值到底是系統給的,還是你自己設定的。而當加了"?",允許為空後,那麼就不一樣了,系統是不會給出預設值的,從而避免了一些不必要的錯誤——這種錯誤往往還很難發現。

C 中的語法糖

語法糖,意指那些沒有給計算機語言新增新功能,而只是對人類來說更 sweet 的語法,意在使得程式設計風格更易讀。c 2.0,3.0發布的新特性,除了泛型不是語法糖,其他所有的新特性幾乎都是語法糖。但初學者往往因為不了解這些語法糖,從而在閱讀 的時候,難以理解其真正的運作方式。最著名的莫過於lamda...

Python中語法糖及帶參語法糖

在python中,符號常被稱作語法糖 裝飾器 在某函式定義時,用以包裝該函式,以達到擷取,控制該函式的目的。def d f print d.k f 此處保留了傳進來的原函式 f def f x return k x 2 return f 此處不能寫成f x f是函式控制代碼,如果帶 則呼叫,這裡只返...

Objective C中的語法糖

xcode 4.4中llvm compiler 4.0 引入的新特性 2012年wwdc發布的東西 到這小菜本人就有柳暗花明又一村的感覺啦 就可以好好的偷一下懶啦 於是系統的總結了一下引入的新的特性,話不多說,coder說話哪能少的了code呢!ludashi 走起 雖然是12年的東西,這不剛學蠻 ...