码迷,mamicode.com
首页 > 其他好文 > 详细

STL——静态常量整数成员在class内部直接初始化

时间:2014-10-29 23:33:08      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   os   ar   sp   strong   

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

  bubuko.com,布布扣

一般,非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;
}

  错误提示:

bubuko.com,布布扣

如果加了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;
}

  错误提示:

bubuko.com,布布扣

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

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

  

STL——静态常量整数成员在class内部直接初始化

标签:style   blog   http   io   color   os   ar   sp   strong   

原文地址:http://www.cnblogs.com/wuchanming/p/4060540.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!