日本一区二区免费播放_麻豆导航_久久精品99_国产性av_色婷婷噜噜久久国产精品12p_av福利资源_精品综合久久

當前位置:首頁 > 網(wǎng)站舊欄目 > 學習園地 > 設計軟件教程 > D 2.0 Const/Final/Invariant 概念簡介

D 2.0 Const/Final/Invariant 概念簡介
2010-01-13 21:05:42  作者:  來源:


D 2.0 Const/Final/Invariant 概念簡介
 
D 2.0 Const/Final/Invariant 概念簡介

    D 2.0 specs 里的相關文檔可讀性不佳,因此我總結了一個簡單的 const/final/invariant 概念簡介,更詳細的用法還請參考 D  2.0 specs。
    在2.0中,invariant 和 const 有作存儲類、定義類型和定義成員函數(shù)三種用途,深刻地改變了D程序編寫的方式,跟C++一樣,使用const/final/invariant 需要更仔細地設計和編碼,回報是提供了更好的類型安全性并能讓編譯器產(chǎn)生出更高效的代碼。這些 constness 特性,雖然看起來語法很復雜,但也比 C++ 的前后置 const 要容易理解記憶得多了,因為它不像 C++ 中的 const  定義那樣存在很大的隨意性。


1. invariant
1.1    invariant 作存儲類(storage class)
    存儲類是一個指定數(shù)據(jù)存儲地點或方式的標志,static 就是一種存儲類,用來要求編譯器把數(shù)據(jù)存儲到程序的靜態(tài)存儲區(qū)中。
    invariant 存儲類定義一個真正的常量,這個常量決不能更改,甚至有可能是放在只讀存儲器中。因此,invariant 存儲類定義的常量沒有地址,編譯器也會禁止任何的取地址行為。
    invariant 定義的常量只能使用初始化語法賦予初始值,如果 invariant 為引用/指針類型,那么所引用的數(shù)據(jù)也同樣是 invariant 的。

1.2 invariant 作類型
    你可以用 invariant(TYPE) 的方法定義一個含有 invariant 屬性的新類型,括號中的 TYPE 表示整個類型中適用于 invariant 的部分,比如: invariant(int)* ptr; 這行代碼申明了一個指針變量 ptr,ptr本身是變量,但它所指向的類型 (int)是不可變的,因此 *ptr = 3; 這樣的代碼是一個語法錯誤。

1.3 invariant 成員函數(shù)
    invariant 可以用于修飾類和結構的成員函數(shù),在 invariant 成員函數(shù)中傳入的 this 指針/引用及其關聯(lián)的任何東西都保證為 invariant。invariant 成員函數(shù)只能訪問該類或結構的invariant 成員變量或其他 invariant 成員函數(shù)。
   

2. const
2.1 const 存儲類
    const 存儲類類似于 invariant 存儲類,不同的是 const 定義的指針/引用所指向的數(shù)據(jù)可以是變量,因此它們可能會在其他地方被修改。

2.2 const 作類型
    與 invariant 作類型類似,const(TYPE) 定義一個含有 const 屬性的新類型。不同點是當 const(TYPE) 作為指針/引用類型時,其所指向的類型可以是變量,如:int a; const(int)* ptr = &a; ptr 本身是變量,ptr 也可以指向變量,但是通過 ptr 只能只讀地訪問 a。


2.3 const 成員函數(shù)
    const 修飾的成員函數(shù)類似C++中函數(shù)聲明后置的 const,表示他們不允許更改 "this" 指針/引用指向的對象數(shù)據(jù)。請注意這里的修辭,“不允許”意味著可以像C/C++一樣用轉型騙過編譯器,不過欺騙編譯器恐怕沒什么好結果。與 invariant 成員函數(shù)類似,const 成員函數(shù)可以訪問 invariant 和 const 成員變量和函數(shù)。

3. final 存儲類

    final 存儲類定義一個數(shù)據(jù)的訪問模式為只讀,與 invariant 不同的是,編譯器為 final 定義的對象在內存中分配了空間。換句話來說,final 對象跟真正的變量沒什么區(qū)別,只是由編譯器來強制實施對此對象的只讀訪問。final 定義的對象可以用初始化語法初始化或在構造函數(shù)中初始化(加入 final 對象是類成員的話,當然,模塊的this()也支持)。
    在成員函數(shù)方面,很早以前 final 已經(jīng)用來表示禁止 override 了,final 也不能作為類型使用。

更多信息請登陸http://61.191.27.74:802/ 最后,歡迎加入http://61.191.27.74:802/的會員


安徽新華電腦學校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
主站蜘蛛池模板: 韩国三级伦理久久影院 | 99视频一区 | 免费人成视网站在线不卡 | 九九99靖品| 99精品视频不卡在线观看免费 | 欧美日本在线播放 | 激情视频在线观看网站 | 免费成人看片 | 青青在线播放 | 动漫在线观看免费网站资源 | 夜夜操天天 | 亚洲免费大片 | 精品九九久久 | 国产精品福利久久2020 | 国产三级日本三级日产三级66 | 欧美曰逼视频 | www.狠狠操.com | 日本a在线播放 | 蜜臀免费视频 | 欧美亚洲欧美日韩中文二区 | 免费激情视频在线观看 | 婷婷婷色 | 青青操国产视频 | 日韩性大片免费 | 婷婷人人爽人人爽人人片 | aaa日本| 日本视频黄 | 久久99草 | 99精品视频免费在线观看 | 久久国产夜色精品噜噜亚洲a | 久久免费视频1 | 一级做a毛片在线看 | 国产一卡2卡3卡四卡网站 | 热热影院| 激情在线观看视频 | 久久免费视频2 | 美女一级a毛片免费观看 | 青草青视频在线观看 | 日本亚洲国产精品久久 | 久久精品国产亚洲综合色 | 日本免费专区 |