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

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

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

  

相关文章
|
25天前
|
存储 算法 编译器
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(一)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
35 0
|
25天前
|
设计模式 算法 数据安全/隐私保护
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
25 0
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
|
1月前
|
编译器 程序员 数据安全/隐私保护
C++类成员解析:编译器如何识别和处理声明与定义(C++ 类的作用域以及查找顺序)
C++类成员解析:编译器如何识别和处理声明与定义(C++ 类的作用域以及查找顺序)
13 0
|
2月前
|
存储 编译器
C中的变量定义
C中的变量定义。
10 0
|
3月前
|
存储 C# 容器
掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南
变量是用于存储数据值的容器。 在 C# 中,有不同类型的变量(用不同的关键字定义),例如: int - 存储整数(没有小数点的整数),如 123 或 -123 double - 存储浮点数,有小数点,如 19.99 或 -19.99 char - 存储单个字符,如 'a' 或 'B'。Char 值用单引号括起来 string - 存储文本,如 "Hello World"。String 值用双引号括起来 bool - 存储具有两个状态的值:true 或 false
37 2
|
3月前
|
C语言
C11中类成员变量定义时初始化问题
C11中类成员变量定义时初始化问题
27 0
|
3月前
|
Shell
变量的定义和引用
变量的定义和引用。
32 0
|
6月前
|
存储 编译器
C 中的变量定义
C 中的变量定义。
37 1
|
10月前
|
存储 编译器 C语言
C++变量的定义
C++变量的定义
|
12月前
重新定义变量
重新定义变量
53 0