• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            SIZEOF宏,彌補(bǔ)sizeof不足

             

            對(duì)POD

            struct Data

            {

                int a;

                int b[32];

                char c[128];

            };

            C/C++不能夠支持如下的語(yǔ)法:sizeof(Data::a); sizeof(Data::b); sizeof(Data::c[0]), sizeof必須要有存在的對(duì)象,才可以進(jìn)行操作,這個(gè)不好

            仿照offsetof宏,定義一個(gè)SIZEOF宏:#define SIZEOF(s,m) sizeof(((s *)0)->m)

            VC6下可以工作,其他環(huán)境不知

             

            #define SIZEOF(s,m) sizeof(((s *)0)->m)

            struct Data

            {

                int a;

                int  b[32];

                char c[128];

            };

             

            int main(int argc, char* argv[])

            {

                int z = 0;

                z = SIZEOF(Data, a);    //---- 4

                z = SIZEOF(Data, b);//---- 128

                z = SIZEOF(Data, c);//---- 128

                z = SIZEOF(Data, b[0]);//---- 4

                z = SIZEOF(Data, c[0]);//---- 1

                return 1;

            }

            posted on 2008-11-28 18:56 肥仔 閱讀(3886) 評(píng)論(17)  編輯 收藏 引用 所屬分類(lèi): C++ 基礎(chǔ)

            評(píng)論

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            template<typename R , typename T>
            size_t member_size( R T::* )
            {
            return sizeof(R);
            }

            printf( "%d\n" , member_size( &Data::c );
            2008-11-28 19:57 | LOGOS

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            0指針用來(lái)在不生成對(duì)象的情況下計(jì)算結(jié)構(gòu)體成員的偏移是個(gè)很好的應(yīng)用
            2008-11-29 12:48 | 老狼

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @LOGOS
            能詳細(xì)的解釋一下嗎?
            2008-11-29 14:40 | 過(guò)路人

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @過(guò)路人
            只是一個(gè)簡(jiǎn)單的模板而已
            R即成員變量的類(lèi)型
            2008-11-29 15:46 | LOGOS

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            to LOGOS:你的方法很好,但有兩個(gè)缺點(diǎn):
            1. 不能作為編譯器期常量,這和sizeof的行為不一致
            2. 不能用于引用類(lèi)型的成員,比如
            struct Data
            {
            int (&d4)[2];
            };
            2008-12-01 11:45 | 周星星

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @周星星
            傳說(shuō)中挖bug狂人?
            我blog偷盜了你蠻多篇文章,不要報(bào)警啊
            2008-12-01 12:34 | 肥仔

            # re: SIZEOF宏,彌補(bǔ)sizeof不足[未登錄](méi)  回復(fù)  更多評(píng)論   

            不錯(cuò)
            2008-12-01 19:11 | 王博煒

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @肥仔
            歡迎盜版:)

            @LOGOS
            變?yōu)榫幾g器期常量可以用
            template<typename R,typename T> R& member_type( R T::* );
            #define member_size(rt) sizeof( member_type(rt) )
            但對(duì)于引用型成員變量則沒(méi)有辦法,我懷疑C++就不允許 R T::* 來(lái)指向引用型成員變量。
            2008-12-02 09:04 | 周星星

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @LOGOS
            文章中有這么一句話(huà):
            C/C++不能夠支持如下的語(yǔ)法:sizeof(Data::a); sizeof(Data::b); sizeof(Data::c[0]), sizeof必須要有存在的對(duì)象,才可以進(jìn)行操作,這個(gè)不好

            請(qǐng)問(wèn),用模板是不是可以不需要存在的對(duì)象呢?
            應(yīng)該是要的吧?



            2008-12-03 19:13 | OHFISH

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @OHFISH
            文章的這句話(huà)。。。。
            sizeof(int),sizeof(double)
            Data::a既不是一個(gè)類(lèi)型,也不是一個(gè)變量
            2008-12-03 19:36 | LOGOS

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            的確,既不是類(lèi)型,也不是變量.
            作者的方法是:sizeof(((s *)0)->m)
            你的方法是:模板

            我想請(qǐng)教一下:
            你的模板在運(yùn)行期是不是要?jiǎng)?chuàng)建一個(gè)對(duì)象?

            樓上 老狼說(shuō):
            "0指針用來(lái)在不生成對(duì)象的情況下計(jì)算結(jié)構(gòu)體成員的偏移是個(gè)很好的應(yīng)用"
            老狼說(shuō)的對(duì)嗎?
            如果模板在運(yùn)行期要?jiǎng)?chuàng)建對(duì)象,而老狼說(shuō)的又對(duì)的話(huà),那你和作者的方法還有區(qū)別的

            2008-12-03 23:44 | OHFISH

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @OHFISH
            老狼說(shuō)得對(duì)
            模板不生成對(duì)象
            2008-12-04 09:14 | LOGOS

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            template<typename R , typename T>
            class member_size( R T::* )
            {
            public:
            enum {
            result=sizeof(R);
            };
            };

            cout<<member_size<&Data::a>::result<<endl;
            常量了吧
            2008-12-04 10:34 | vczh

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @vczh
            這種核武器都用上了。。。

            看來(lái)看去,還是宏最簡(jiǎn)潔,優(yōu)美,漂亮。
            2008-12-04 11:02 | 肥仔

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            @vczh
            type traits
            pfpf....
            2008-12-04 15:18 | LOGOS

            # re: SIZEOF宏,彌補(bǔ)sizeof不足  回復(fù)  更多評(píng)論   

            不錯(cuò),學(xué)習(xí)了
            2008-12-04 22:56 | 妮子

            # re: SIZEOF宏,彌補(bǔ)sizeof不足[未登錄](méi)  回復(fù)  更多評(píng)論   

            你自己定義什么類(lèi)型自己難道不清楚嗎?在大程序中SIZEOF宏除了可能引發(fā)混亂外,何用之有呢?
            2008-12-17 20:19 | Chipset
            老司机午夜网站国内精品久久久久久久久 | 青青久久精品国产免费看 | 久久伊人精品青青草原日本| 久久国产福利免费| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久WWW免费人成一看片| 日韩精品久久无码中文字幕| 久久久久AV综合网成人| 精品久久久久久久久中文字幕| 亚洲综合婷婷久久| 青春久久| 99久久国产热无码精品免费| 国产激情久久久久影院老熟女免费 | 午夜人妻久久久久久久久| 97久久精品无码一区二区| 久久综合综合久久97色| 亚洲精品无码久久久久AV麻豆| 久久精品国产乱子伦| 国产亚洲欧美成人久久片| 热综合一本伊人久久精品| 久久永久免费人妻精品下载| 久久国产精品国语对白| 一本一道久久综合狠狠老| 天天久久狠狠色综合| 久久SE精品一区二区| 久久av高潮av无码av喷吹| 7777精品久久久大香线蕉| 久久99亚洲综合精品首页| 日日噜噜夜夜狠狠久久丁香五月| 久久国产精品一区| 久久无码人妻一区二区三区| 久久久亚洲精品蜜桃臀| 国产成人久久激情91| 久久无码高潮喷水| 99精品伊人久久久大香线蕉| 亚洲AV日韩AV永久无码久久| 久久婷婷人人澡人人| 9999国产精品欧美久久久久久| 精品蜜臀久久久久99网站| 久久经典免费视频| 久久WWW免费人成—看片|