• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            qiezi的學(xué)習(xí)園地

            AS/C/C++/D/Java/JS/Python/Ruby

              C++博客 :: 首頁(yè) :: 新隨筆 ::  ::  :: 管理 ::
            這個(gè)版本實(shí)現(xiàn)了計(jì)劃已久的數(shù)組直接量。

            import?std.stdio;

            void?main(){
            ??{
            ????static?
            int[]?arr?=?[1,2,3,4,5];
            ????writefln(typeid(typeof(arr[
            0])));
            ????writefln(arr);
            ??}
            ??{
            ????static?float[]?arr?
            =?[1f,1,3,4,5];
            ????writefln(typeid(typeof(arr[
            0])));
            ????writefln(arr);
            ??}
            ??{
            ????static?char[][]?arr?
            =?["1","2","3","4","5"];
            ????writefln(typeid(typeof(arr[
            0])));
            ????writefln(arr);
            ??}
            }

            數(shù)組類型由第1個(gè)元素類型決定,類型不匹配將會(huì)產(chǎn)生編譯錯(cuò)誤。

            接著是多維數(shù)組:

            import?std.stdio;

            void?main(){
            ??static?
            int[][]?arr?=?[[1,2,3,4],?[4,5,6],?[7,8]];
            ??
            foreach(int[]?sub;?arr){
            ????
            foreach(int?i;?sub){
            ??????writefln(i);
            ????}
            ??}
            }


            另一個(gè)特性是更強(qiáng)的typedef。原有的typedef強(qiáng)類型在某些情況下會(huì)產(chǎn)生混亂。

            下面的代碼摘自 http://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.bugs&artnum=3843

            import?std.stdio;

            typedef?
            int?Int1;
            typedef?
            int?Int2;

            void?show(Int1?v)?{
            ?????writefln(
            "Int1:?%d",?v);
            }

            void?show(Int2?v)?{
            ?????writefln(
            "Int2:?%d",?v);
            }

            void?show(
            int?i)?{
            ?????writefln(
            "int:?%d",?i);
            }

            void?show(long?l)?{
            ?????writefln(
            "long:?%d",?l);
            }

            void?main()?{
            ?????Int1?value1?
            =?42;
            ?????Int2?value2?
            =?69;

            ?????show(value1?
            +?value2);
            ?????show(value2?
            +?value1);
            ?????show(
            2?*?value1);
            ?????show(value1?
            *?2);
            ?????show(value1?
            +?value1);
            ?????show(value2?
            -?value2);
            ?????show(value1?
            +?2);
            ?????show(
            3?+?value2);

            ?????long?l?
            =?23;
            ?????show(value1?
            +?l);
            ?????show(l?
            +?value2);

            ?????short?s?
            =?105;
            ?????show(s?
            +?value1);
            ?????show(value2?
            +?s);
            }

            如上面代碼所示。typedef定義出來(lái)的類型和原有類型的相同形式重載函數(shù)可以共存,這可以完成更強(qiáng)類型的重載,C++的重載還不能實(shí)現(xiàn)這個(gè)。

            這個(gè)強(qiáng)類型的typedef好像原本就支持,大概是運(yùn)算結(jié)果類型比較模糊。

            好處是顯頁(yè)易見(jiàn)的。比如有一個(gè)Time和TimeInterval類型,它用來(lái)表示絕對(duì)時(shí)間或相對(duì)時(shí)間間隔;另有一個(gè)輸出函數(shù)用來(lái)顯示結(jié)果。

            import?std.stdio;
            import?std.string;

            typedef?long?
            Time;
            typedef?long?TimeInterval;

            void?output(
            Time?t){
            ??writefln(
            "Time:?"?~?toString(cast(long)t));
            }
            void?output(TimeInterval?t){
            ??writefln(
            "Interval:?"?~?toString(cast(long)t));
            }
            void?main(){
            ??
            Time?time?=?cast(Time)100;
            ??TimeInterval?interval?
            =?cast(TimeInterval)100;
            ??output(
            time);
            ??output(interval);
            }

            是的,使用上麻煩了很多,因?yàn)槲覀冊(cè)噲D用一個(gè)數(shù)值類型去表示多個(gè)矢量類型。

            這里Time time = cast(Time)100不再只是100這個(gè)簡(jiǎn)單的數(shù)值,它還攜帶了Time這個(gè)類型。TimeInterval interval = cast(TimeInterval)100也不只是100這個(gè)數(shù)值,我們給它賦予了時(shí)間間隔的含義。

            還可以想像得更開闊一些,用它定義時(shí)間、長(zhǎng)度、面積、加速度、速度、溫度等,重載一些計(jì)算函數(shù)(可惜D還不支持全局操作符重載),這樣就方便完成一些物理量的運(yùn)算了,而且類型得到檢查,速度加一個(gè)整數(shù)值結(jié)果還是速度,速度乘時(shí)間得到的是長(zhǎng)度,時(shí)間減時(shí)間得到的是時(shí)間間隔,速度加時(shí)間將產(chǎn)生編譯錯(cuò)誤。。。。。。神奇的是這些類型可能都是一些簡(jiǎn)單類型,我相信它至少可以保證運(yùn)行效率不會(huì)太低。當(dāng)然你用C++類也可以完成這些,并且利用編譯器優(yōu)化讓它的效率保持最高,甚至內(nèi)聯(lián)的結(jié)果就是簡(jiǎn)單類型的運(yùn)算,我還是更愿意使用這簡(jiǎn)單的類型來(lái)typedef。當(dāng)然這可能需要寫大量重復(fù)的函數(shù)重載形式,沒(méi)有關(guān)系,我想使用模板和mixin應(yīng)該可以簡(jiǎn)化這一過(guò)程,而且會(huì)有相當(dāng)多的家伙們?cè)敢馐褂眠@種麻煩的形式來(lái)獲得更“正確”的編譯檢查。


            所以說(shuō),D語(yǔ)言的typedef的意義其實(shí)就是實(shí)現(xiàn)了矢量類型。



            又多想了一點(diǎn)。

            強(qiáng)類型要,語(yǔ)法糖也應(yīng)該要。是不是可以借鑒一下ruby的語(yǔ)法,實(shí)現(xiàn)這種調(diào)用呢?

            Length?l?=?1.cm;
            l?
            =?1.m;
            Time?t?=?Time.now;
            TimeInterval?i?
            =?3.hours;

            免去了一些初始化的麻煩。
            posted on 2006-09-19 20:16 qiezi 閱讀(567) 評(píng)論(2)  編輯 收藏 引用 所屬分類: D
            国产精品va久久久久久久| 亚洲中文字幕无码久久2020 | 久久www免费人成看国产片| 色综合久久久久综合体桃花网| 久久久中文字幕日本| 久久国产精品波多野结衣AV| 99久久综合国产精品二区| 九九久久99综合一区二区| 久久精品国产久精国产| 一本伊大人香蕉久久网手机| 99久久综合国产精品二区| 久久久网中文字幕| 无码精品久久一区二区三区| 波多野结衣久久一区二区 | 久久久高清免费视频| 久久久久久久91精品免费观看 | 国产精品久久一区二区三区| 精品久久久久久综合日本| 9191精品国产免费久久| 久久久久久久综合综合狠狠| 中文字幕无码久久精品青草 | 亚洲级αV无码毛片久久精品| 久久亚洲精品国产亚洲老地址 | 久久综合中文字幕| 久久综合五月丁香久久激情| 无码超乳爆乳中文字幕久久| 久久精品国产影库免费看| 久久久久亚洲AV成人网| 少妇无套内谢久久久久| 久久91精品国产91久久麻豆| 亚洲国产成人久久综合碰| 久久丫精品国产亚洲av| 国产午夜电影久久| 亚洲国产欧洲综合997久久| 99久久无码一区人妻| 久久久久亚洲精品日久生情| 久久亚洲精品视频| 婷婷五月深深久久精品| 久久久久国产精品嫩草影院| 久久夜色精品国产噜噜麻豆| 亚洲精品无码久久毛片|