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

  

时间: 2024-12-16 03:24:20

STL——静态常量整数成员在class内部直接初始化的相关文章

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

1 #include <vector> 2 #include <deque> 3 #include <algorithm> 4 #include <iostream> 5 #include <ostream> 6 #include <iterator> 7 using namespace std; 8 template <typename T> 9 class conststaticconstant 10 { 11 pub

关于“只有静态常量整型数据成员才可以在类中初始化”

关于“只有静态常量整型数据成员才可以在类中初始化” 关于类中的静态成员变量, 在类中只能声明,不能定义注意在类的内部只是声明,不是定义 类中的静态变量是属于类的,不属于某个对象!不能在定义对象时对变量初始化!就时不能用构造函数来初始化!而且使用时应加上类名,而不是对象.例如: class A{ static int x; static int y; } int A::x=1; int A::y=2;//这样初始化! int main(){ cout<<A::x<<endl; cou

Cocos2d-x 3.1.1 学习日志3--C++ 初始化类的常量数据成员、静态数据成员、常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 #include <iostream> using std::cout; using std::endl; class base { public: base(int

C++类中常量数据成员和静态数据成员初始化

常量数据成员初始化原则: 在每一个构造函数的初始化列表中初始化 静态数据成员初始化原则: 类内声明,类外初始化(因为它是属于类的,不能每构造一个对象就初始化一次) // test_max.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include <iostream> #include <vector> using namespace std; class A { public: A(int i):a(0) {} A():

当一个非静态的成员是常量或是引用类型时,需要怎么样初始化它们

const int a ;//此句代码是错误的,因为const修饰的a必须要在定义的时候初始化. int &a;//同理,也是错的,在定义的时候必须要初始化,其他类型的数据也是一样. 那么如果一个类的成员有非静态const类型,或者引用类型时,该怎么初始化呢? #include<iostream>using namespace std;class A {  public: const int a;  A (int t){    a=t;   }};int main(){  A b(3)

Cocos2d-x 3.1.1 学习日志2--error:只有静态常量整型数据成员才可以在类中初始化

今天遇到比较低端的一个问题,就是成员的初始化问题,编译器也无法验证,不同的编译器有些能过有些不能过,我也不知道为什么,总是我们以vs为准吧,以为我们用的环境就是它,话不多说,解决方案如下: 在类中    static const double PI=3.1416; error:只有静态常量整型数据成员才可以在类中初始化 常整型静态数据成员可以在类中直接初始化,而常实型静态数据成员不可以 class circle { int a; // 普通变量,不能在类中初始化 static int b; //

c++初始化常量数据成员、静态数据成员。常量静态数据成员

有关const成员.static成员.const static成员的初始化: 1.const成员:只能在构造函数后的初始化列表中初始化 2.static成员:初始化在类外,且不加static修饰 3.const static成员:类只有唯一一份拷贝,且数值不能改变.因此,可以在类中声明处初始化,也可以像static在类外初始化 示例:   #include <iostream> using std::cout; using std::endl; class base { public: bas

静态常量非整形成员变量的初始化问题

在C++的编译器中只允许静态常量整型变量直接在类声明中赋值,除此之外的任何变量类型都不可以.而且静态量只是声明的话是无法使用的,必须在cpp文件中初始化才可以.常量(整型或者非整形)要在类的构造函数之后用":"来声明,具体格式如下: Gasproperty::Gasproperty( void) : P(0) , T(0) , phi(0) { } 对静态变量有两种初始化方式.第一可以在单独的静态函数中进行赋值.第二在类的定义文件(cpp)中,以如下方式初始化: double Gasp

静态常量static和方法重载

静态常量思维导图 有时在处理问题时,会需要两个类在同一个内存区域共享一个数据.这时没有必要在两个类中同时创建同一个常量,因为这样系统会将这两个不在同一个类中定义的常量分配到不同的内存空间中.可以将这个常量设置为静态的. 被声明为static的变量.常量和方法被称为静态成员.静态成员是属于类所有的,区别于个别对象,可以在本类或其他类使用类名和“.”运算符调用静态成员. 语法格式: 类名.静态类成员 注意: 虽然静态成员也可以使用“对象.静态成员”的形式进行调用,但这样的形式通常不被鼓励使用,因为这