如题所述,本文将详细讲解关于C++中静态成员的类内初始化的整个流程。在本文的实现过程中,我们将会提供两个示例来帮助读者更好的理解和掌握相关内容。
一、静态成员变量概述
在开始讲解静态成员的类内初始化之前,我们先来了解一下静态成员变量的概念。
静态成员变量是属于所有类的实例共享的,不同的对象可以访问相同的静态成员变量,同时,静态成员变量声明时不需要在类外部再进行定义,他们在内存中只有一份拷贝。
二、静态成员的类内初始化
在讲解静态成员的类内初始化之前,我们先来考虑一个问题: 对于C++中常规变量,我们可以在变量定义时直接将其初始化, 如int a = 10;
;那么对于静态成员变量,我们该如何在定义时就进行初始化操作呢?
事实上,C++11为我们提供了一种新的语法,使我们可以在类内部和类外部分别对静态成员变量进行初始化,如下:
class MyClass{
public:
static int x = 5; // 类内初始化语法
static int y;
};
int MyClass::y = 10; // 类外初始化语法
从上述代码中可以看出,我们对于静态成员变量的初始化方式分为了两种,一种是在类内部进行初始化,另外一种则是在类外部进行初始化。那么不同的初始化方式具体各自是怎样的呢?
2.1 静态成员变量类内初始化
当我们需要在类内部进行静态成员变量的初始化时,我们需要使用到constexpr static
来进行修饰。
class MyClass{
public:
constexpr static int x = 5;
};
这样之后就可以直接使用MyClass::x
来访问了,同时静态成员变量也已经在定义时被初始化为5
了。
需要注意的是,类内静态成员变量必须进行初始化,否则会产生编译错误。
2.2 静态成员变量类外初始化
当我们选择使用类外来进行静态成员变量的初始化时,则需要分为两个步骤,首先我们需要在类内部进行声明并定义静态成员变量:
class MyClass{
public:
static int x;
};
int MyClass::x = 5;
然后我们在类外进行初始化操作,具体代码如下:
int MyClass::x = 5;
这样之后,静态成员变量就可以与采用类内初始化的方法具有相同的功能,同时我们还可以在函数体内进行静态成员变量的赋值以及其他函数的调用。
三、示例
为了更好地理解静态成员的类内初始化,这里提供两个示例。第一个示例演示了如何使用类内初始化语法来初始化静态变量,第二个示例则演示如何使用类外初始化语法来进行静态成员变量的初始化。
3.1 示例1:静态成员类内初始化
#include<iostream>
class MyClass
{
public:
constexpr static int x = 5;
constexpr static int y = x+1;
};
int main()
{
std::cout << MyClass::x << std::endl;
std::cout << MyClass::y << std::endl;
return 0;
}
代码中,我们使用了constexpr static
来对静态变量进行了初始化操作,这样我们可以直接在类外使用MyClass::x
和MyClass::y
进行访问。
3.2 示例2:静态成员类外初始化
#include<iostream>
class MyClass
{
public:
static int x;
static void foo(){ std::cout << "Hello World" << std::endl; }
};
int MyClass::x;
void bar()
{
MyClass::x = 100;
MyClass::foo();
}
int main()
{
bar();
std::cout << MyClass::x << std::endl;
return 0;
}
代码中,我们首先在类内进行了声明并初始化MyClass::x
,然后通过我们的bar
函数来进行了重新赋值的操作,并调用了MyClass::foo
函数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++ 静态成员的类内初始化详解及实例代码 - Python技术站