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

      

  • 相关阅读:
    Are You Safer With Firefox?(zz)
    IIS+PHP下调用WebService初试
    垃圾链接和网络欺骗
    微软即将发布64位XP和Win2003 SP1(zz)
    今日个人大事记:)
    GT4 Web Service编译和发布初探
    纪念一下QQ等级和在线时长
    今天安装GT3.9.5碰到的问题
    判断32位整数二进制中1的个数
    Windows 2003 SP1新体验
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4060540.html
Copyright © 2011-2022 走看看