zoukankan      html  css  js  c++  java
  • STL——静态常量整数成员在class内部直接初始化

    如果class内含const static integral data member,那么根据C++标志规格,我们可以在class之内直接给予初值。所谓integral泛指所有的整数型别(包括浮点数),不单只是指int,下面是一个例子:

    #include<iostream>
    using namespace std;
    
    template <typename T>
    class testClass
    {
    public:
        static const double _datai=1.2;
        static const long _datal=3L;
        static const char _datac='c';
    };
    
    int main()
    {
        cout<<testClass<int>::_datai<<endl;
        cout<<testClass<int>::_datal<<endl;
        cout<<testClass<int>::_datac<<endl;
    }
    

      

    一般,非const的static数据成员是不能在类的内部初始化,但是,我们可以为静态成员提供const整数类型的类内初始值。

    例如,下面的情况会报错:

    #include<iostream>
    using namespace std;
    
    template <typename T>
    class testClass
    {
    public:
        static double _datai=1.2;
        static const long _datal=3L;
        static const char _datac='c';
    };
    
    int main()
    {
        cout<<testClass<int>::_datai<<endl;
        cout<<testClass<int>::_datal<<endl;
        cout<<testClass<int>::_datac<<endl;
    }
    

      错误提示:

    如果加了const 或者constexpr之后,就可以在类内进行初始化了

    对于static成员,如果在类的内部提供了一个初值,则成员在类外的定义不能再指定一个初始值了。例如:

    #include<iostream>
    using namespace std;
    
    template <typename T>
    class testClass
    {
    public:
        static const double _datai=1.2;
        static const long _datal=3L;
        static const char _datac='c';
    };
    
    
    template <typename T>
    const double testClass<T>::_datai=8.8;
    
    int main()
    {
        cout<<testClass<int>::_datai<<endl;
        cout<<testClass<int>::_datal<<endl;
        cout<<testClass<int>::_datac<<endl;
    }
    

      错误提示:

    下面的情况是允许的,直接在定义的时候提供初始值或者在类内提供初始值之后只在类外定义但不提供初始值。

    #include<iostream>
    using namespace std;
    
    template <typename T>
    class testClass
    {
    public:
        static const double _datai;
        static const long _datal=3L;
        static const char _datac='c';
    };
    
    
    template <typename T>
    const double testClass<T>::_datai=8.8;
    
    int main()
    {
        cout<<testClass<int>::_datai<<endl;
        cout<<testClass<int>::_datal<<endl;
        cout<<testClass<int>::_datac<<endl;
    }
    

      或者

    #include<iostream>
    using namespace std;
    
    template <typename T>
    class testClass
    {
    public:
        static const double _datai=1.2;
        static const long _datal=3L;
        static const char _datac='c';
    };
    
    template <typename T>
    const double testClass<T>::_datai;
    
    int main()
    {
        cout<<testClass<int>::_datai<<endl;
        cout<<testClass<int>::_datal<<endl;
        cout<<testClass<int>::_datac<<endl;
    }
    

      

  • 相关阅读:
    postgresql 2012 大会PPT下载 Joe
    Postgresql连接 Joe
    查看Postgresql的连接数 Joe
    greta使用
    CString GetFileDir(const CString& csFile)
    UnicodeToAnsi函数
    myeclipse优化方案
    bool CreatedMultipleDirectory( char* direct)
    LPWSTR GBK(LPCSTR plszUtf8, WCHAR* lpszGBK)
    真正整合资源的高手
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4060540.html
Copyright © 2011-2022 走看看