吐槽C++:C++ 類成員變量初始化 之 初始化帶有參數的構造函數 的類成員變量。


 

本來我想寫這樣的代碼:

class MatchManager{
public:
    MatchManager()
    {
    }

    class OnTimerRunFuncHelper{
    public:
        OnTimerRunFuncHelper(const int setTimer) :n_ConfigTimer(setTimer){
            n_Timer = 0;
        }
        //返回true 則計時器到了 可以進行你的函數了
        bool OnTimerCheck(){
            n_Timer++;
            if (n_Timer == n_ConfigTimer){
                n_Timer = 0;
                return true;
            }
            return false;
        }
    public:
        const int n_ConfigTimer;//配置最大計時器
        int n_Timer;//計時器
        int GetTimerCount(){ return n_Timer; }
        int GetConfigTimerCount(){ return n_ConfigTimer; }
    };

    OnTimerRunFuncHelper t_checkEliminateTimer(2);

};

但是C++編譯器(vs2013)提示:

error C2059: 語法錯誤:“常量”

 

然后我查了一下,居然代碼要這么寫:

class MatchManager{
public:
    MatchManager() :t_checkEliminateTimer(2)
    {
    }

    class OnTimerRunFuncHelper{
    public:
        OnTimerRunFuncHelper(const int setTimer) :n_ConfigTimer(setTimer){
            n_Timer = 0;
        }
        //返回true 則計時器到了 可以進行你的函數了
        bool OnTimerCheck(){
            n_Timer++;
            if (n_Timer == n_ConfigTimer){
                n_Timer = 0;
                return true;
            }
            return false;
        }
    public:
        const int n_ConfigTimer;//配置最大計時器
        int n_Timer;//計時器
        int GetTimerCount(){ return n_Timer; }
        int GetConfigTimerCount(){ return n_ConfigTimer; }
    };

    OnTimerRunFuncHelper t_checkEliminateTimer/*(2)*/;

};

類似的問題 還有比如 類靜態成員變量的初始化,要在 cpp 文件 單獨寫一行,進行初始化。

我真是感覺C++ 誤人子弟啊。Java 有些東西確實好,但是無法引用到C++中,就是因為這些 落后,但是卻無人(主要是C++編譯器廠商們、以及標准化組織)更改這些東西。

 

我真的希望有 C++的升級版 C++++ 能擁有Go語言 、java語言等的一些優點,並且兼容C++,但不被C++兼容。

 

蛋疼。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM