C 中var myInt new 20, 4, 16, 9, 2 是對什麼的表示?

時間 2021-06-05 20:58:20

1樓:

是一種基於成員型別的隱式推導,是乙個語法糖,是一種編譯器行為,對實際執行沒有影響。打個比方:

生成的中間碼是

可以看到都是在

newarr [mscorlib]System.Int32而這個推導依賴內部的成員型別可以推導出來,打個比方這樣就不行

2樓:AlseinX

C#的初始化器不僅僅適用於陣列,因此無法僅僅通過就推定它是陣列型別。

所謂的型別推定,有兩種情況:明確左值推定右值,和明確右值推定左值。

比如,var定義變數,是明確右值型別推定左值型別的情況。

var a = "aaa";

這裡"aaa"是明確的string,因此變數a的型別被推定為string,這裡就相當於是

string a = "aaa";

但是,C#中有些表示式是具有不明確的型別語義的,需要依賴左值來推定右值的具體型別,這種情況就不能用var來指定推定型別,最簡單的就是通過來建立陣列的情況。僅當用陣列型別定義變數時,才隱式具有建立陣列的含義。此時var和都是不明確的型別,因此無法推定a的實際型別,編譯錯誤。

有兩種可能的寫法:

var a = new ;

第二種:

int a = ;

其中第一種是從右值推導左值的型別的情況,new語法的含義是通過給出元素的型別推定陣列的型別。此時因為給出的元素型別為int,因此new相當於new int。因為明確了右值的型別是int,所以var a可以推定為int a。

第二種是從左值推導右值的情況,因為int a明確了定義變數a的左值型別為int,所以右邊可以使用隱式陣列初始化的語法(不推薦),將右表示式推定為new int

如何看待C 委員會打算在C 20中棄用原始指標?

汗 看過原文,4月1日發布的,記得最後一句應該是英文寫的節日快樂一類吧 記不是很清楚了。國內正好慢半拍,記得那天Adobe也有重大事件發布。 c 原始的要求就是要和c相容以及不損失效能,這個提議直接砍掉一半的基礎,基本上就是假新聞了。不過c 委員會真實不了解一線開發人員的疾苦啊,現在c 需要的是簡化...

devil blues deluxe和C20口琴哪個好,或者有更加好的打算(200 400)

丟失的草帽 devil blues deluxe和c20都沒吹過。但本人吹過並且擁有藍網十週年,wooden voice,proreeds及babyfat可以說藍網琴的水平很高可以說是中國產口琴的精品。和萊的sp20,mb1896,mbd,mbc自己也吹過也擁有過部分。賽德的1847c自己也擁有。我...

面對C 20, 應該如何入門學習C

Tex 先學傳統C 再一步一步過渡到現代C 儘管有些書中的內容現在已經不適用 或者有更簡便的實現,但是該看的書還是得看,該踩的坑還是得踩。不要想一步登天,直接進入C 20。 飛翔的荷蘭豬 推薦 c Templates 第二版。這本書不會一上來就教特性,然後講例子。而是一種,先講需求,再講如何用老語法...