在种外面对在类中声明的静态变量做的定义是在第一次定义这个类的对象之前执行的么
在类外面对在类中声明的静态变量做的定义是在第一次定义这个类的对象之前执行的么?
标题好像有点绕。
类似这样的东西:
http://bbs.****.net/topics/390525428
上面链接里面的问题中我问了是否有一种可以在定义类的第一个对象之前通过文件中的数据初始化静态成员变量的方法。如果上面的方法确实是在定义类的第一个对象之前执行的话,那么是否可以通过文件中的数据初始化这个静态变量?我不想试了。
------解决方案--------------------
是在定义对象之前的, 而且在 main 函数之前.
简单类型的话, 可以直接编译到数据段中, 文件加载到内存后就有了.
涉及到复杂类型的构造函数之类的, 会在 main 前由 CRT 负责调用相应的函数完成初始化.
标题好像有点绕。
类似这样的东西:
#include <iostream>用这种方法是否可以实现其他语言中的静态构造函数的功能?就是在定义第一个这个类的对象之前对静态函数进行初始化的构造函数。如果
using namespace std;
class Test
{
public:
void show();
private:
static char* sm_str[];
};
void Test::show()
{
cout << sm_str[0] << " " << sm_str[1] << endl;
}
char* Test::sm_str[] = { "abc", "123" };
int main()
{
Test t0;
t0.show();
return 0;
}
char* Test::sm_str[] = { "abc", "123" };定义在于某个类和头文件对应的cpp文件中的话,也能保证会在定义第一个这个类的对象之前执行么?这个不算全局变量吧?所以不会影响到可读性吧?这是我之前问的相关的问题:
http://bbs.****.net/topics/390525428
上面链接里面的问题中我问了是否有一种可以在定义类的第一个对象之前通过文件中的数据初始化静态成员变量的方法。如果上面的方法确实是在定义类的第一个对象之前执行的话,那么是否可以通过文件中的数据初始化这个静态变量?我不想试了。
------解决方案--------------------
是在定义对象之前的, 而且在 main 函数之前.
简单类型的话, 可以直接编译到数据段中, 文件加载到内存后就有了.
涉及到复杂类型的构造函数之类的, 会在 main 前由 CRT 负责调用相应的函数完成初始化.