c++中的类(带静态成员)初始化



我试图理解friend函数,我发现自己写了以下代码

虽然我已经理解了好友函数,但这段代码给我留下了新的问题:

  1. 当我没有实例化任何对象时,这个类是如何初始化的

我知道static成员由类的所有对象共享,并且在创建第一个对象时初始化为0

  1. 什么时候变量base_iderived_i从代码
  2. 中被分配到各自的值?

我想它发生在return derived::derived_i + derived::base_i;

  1. 如果是这样,是否也会在此时为类的所有其他成员分配内存,特别是在这种情况下newVar
#include <iostream>
class base
{
private:
static int base_i;
float newVar;
public:
friend int addClasses();
};
int base::base_i = 5;
class derived : private base
{
private:
static int derived_i;
public:
friend int addClasses();
};
int derived::derived_i = 3;
int addClasses()
{
return derived::derived_i + derived::base_i;
}
int main()
{
std::cout<<addClasses()<<std::endl;
}

当我没有实例化任何对象时,这里的类是如何初始化的

你已经初始化了变量的定义:

int base::base_i = 5; // <-- the initialiser

语言实现负责其余部分。


在什么时候变量base_i和derived_i分别从代码

中被赋值?

具有静态存储时间的非局部变量在调用main之前初始化。


是否还会为该类的所有其他成员分配内存,特别是在这种情况下为newVar分配内存

非静态成员变量的内存是"分配的";当为类的实例分配内存时。您没有在示例程序中实例化类。

最新更新