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

            公告

            <2025年6月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            統計

            • 隨筆 - 9
            • 文章 - 13
            • 評論 - 3
            • 引用 - 0

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            文章分類

            文章檔案

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            為什么靜態成員函數的外部“C”聲明是被禁止的

            函數原型里的外部“C”聲明強制要求用于該函數的C連接(C linkage),而不是缺省的C++連接(C++ linkage)。這就意味著C連接會保證可以從使用其它編程語言寫成的模塊里調用一個函數??例如C、Fortran和COBOL??因為函數名是以一種大多數非C++的編譯器和連接器都很熟悉的方式修飾的。

            一個有趣的問題是,將靜態成員函數的聲明作為外部“C”是否被允許。例如:

            struct C
            {
            ??extern "C" static void f(int); // valid?
            };

            答案是不行。C++的標準是不允許成員函數,不論是靜態的還是非靜態的,被作為外部“C”聲明。第一眼看上去,這個決定似乎過于嚴厲,因為你會把指向靜態成員函數的指針作為普通函數的指針來對待,如下面的例子所示:

            void (*pf) (int) = &C::f; // OK

            名稱修飾

            你不能將靜態成員函數作為外部“C”來聲明有一個很合理的理由:名稱修飾(也叫做name mangling)。C++的名稱修飾是編譯器將函數的名稱轉變成為一個唯一的字符串的過程,這個字符串會對函數的類、其命名空間、其參數表,以及其他等等進行編碼。C++的命名修飾適用于靜態成員函數,也適用于非靜態成員函數。靜態函數的命名修飾的一個好處之一,是能夠在不同的類里使用同一個名稱來聲明兩個或者更多的靜態成員函數??而不會發生名稱上的沖突。考慮一下下面的情況:

            struct C
            {
            ??static void f(int);
            };
            struct D
            {
            ??static void f(int); // doesn't clash with C::f
            };

            f()的外部“C”聲明會禁止命名修飾;如果它被允許的話,那么不同類里具有相同名稱的靜態成員函數就會相互沖突。它的不足之處是,你不能從使用其它語言寫成的模塊里調用這些函數,因為它們有C++連接。]

            =========================================================

            本文作者Danny Kalev 是一個系統分析家、軟件工程師,在C++和面向對象設計方面有著14年的專業經驗。

            posted on 2006-08-25 15:03 blues 閱讀(273) 評論(0)  編輯 收藏 引用

            合区精品久久久中文字幕一区| 久久久无码精品亚洲日韩按摩| 国产精品伊人久久伊人电影 | 色婷婷综合久久久久中文一区二区 | 伊人久久久AV老熟妇色| 久久精品中文字幕大胸| 久久福利资源国产精品999| 久久久久亚洲av无码专区喷水| 久久97精品久久久久久久不卡| 国产巨作麻豆欧美亚洲综合久久| 一级女性全黄久久生活片免费 | 久久精品免费网站网| 狠狠综合久久AV一区二区三区| 久久免费精品一区二区| 婷婷久久五月天| 99久久99久久精品国产片果冻 | 国产精品一区二区久久精品涩爱| 久久久久亚洲av毛片大| 777久久精品一区二区三区无码| 国产三级久久久精品麻豆三级| 久久99精品国产麻豆不卡| 亚洲乱码中文字幕久久孕妇黑人| 精品久久久久久无码中文字幕 | 亚洲精品99久久久久中文字幕| 97久久久精品综合88久久| 久久无码AV一区二区三区| 国产ww久久久久久久久久| 久久线看观看精品香蕉国产| 无码专区久久综合久中文字幕 | 香蕉久久夜色精品升级完成| 婷婷久久综合九色综合绿巨人| 99久久99久久精品国产| 久久亚洲国产精品五月天婷| 国产视频久久| 久久天天躁狠狠躁夜夜不卡| 久久99国产精品久久| 一本色道久久综合狠狠躁篇| 久久久久亚洲AV无码去区首| 久久精品免费一区二区三区| 久久99国产亚洲高清观看首页| 婷婷五月深深久久精品|