C++中static函数 类外定义的时候为什么不写static
巴扎黑
巴扎黑 2017-04-17 11:47:53
0
2
632
class A{
    static void foo();
}

void A::foo(){
    ....
}

为什么定义的时候不能写static了?

巴扎黑
巴扎黑

全部回覆(2)
伊谢尔伦

設想如果你的class A裡有兩個foo()函數:

    class A{
        static void foo();
        void foo();
    };

這樣為了區分它們,你在定義的時候才需要寫static:

    static void A::foo(){
        //....
    }
    void A::foo(){
        //....
    }

然而C++編譯器在區分函數時不把有無static關鍵字考慮在內,而只看函數名,返回類型和參數表,void foo();和static void foo();被視為重複聲明,是被禁止的,也就是說一個類別裡面只能有一個void foo();函數,不管它是static還是非static。為什麼呢?
再設想class A有另一個函數void bar();定義如下:

    void A::bar(){
        //....
        foo();
        //....
    }

這種寫法差不多算是一種慣例吧,在函數bar()內呼叫函數foo()的時候是直接寫foo();而不會寫上函數宣告時使用的static,const等關鍵字,這樣如果你有void foo()還有一個staic void foo(),編譯器是無法區分你呼叫的是哪個foo()的;
既然只能有一個void foo(),那麼你在定義它的時候也就沒必要再寫一次static了,編譯器已經知道它是哪個函數了。

左手右手慢动作

static用於修飾成員變數或成員函數時,只在宣告時在類別的內部宣告即可,實例化或定義的時候不用加static。

class A{
   static int n ;
};

int A::n = 123;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!