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

      

  • 相关阅读:
    百度云如何免费扩容至2055G?
    OKR学习总结
    layui和bootstrap 对比
    使用马克飞象+印象笔记 如何简单便捷地发表博客?
    Sublime使用记录之SublimeServer插件介绍
    12.RcolorBrewer包
    11.R语言流程
    25.conda 下载安装与运用
    7、purge_haplogs 基因组去冗余
    5.MCScanX 与circos下载、安装、运用
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4060540.html
Copyright © 2011-2022 走看看