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;
    }
    

      

  • 相关阅读:
    E. Gosha is hunting (dp + wqs套wqs)
    【Codeforces Round #575 (Div. 3) 】 RGB Substring (hard version) ( FFT)
    C
    poj 1160 Post Office(dp + wqs二分)
    【 2018南京 】Magic Potion (网络流)
    【 2018南京 】Kangaroo Puzzle (思维+暴力模拟)
    【 2018南京 】Country Meow (模拟退火)
    【2018焦作网络赛】 Jiu Yuan Wants to Eat (熟练剖分 + 思维)
    【2018焦作网络赛】 Modular Production Line(费用流)
    【2018焦作网络赛】 B. Mathematical Curse (dp)
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4060540.html
Copyright © 2011-2022 走看看