简而言之,我需要使用从文件中获取的某个值来初始化一个 const 静态成员,并使从它派生的每个对象都保持相同。
假设我有一个程序 -
#include <fstream>
#include <iostream>
#include <string>
class A
{
public:
static const int VAL1;
static const int VAL2;
};
int F(const std::string);
const int A::VAL1 = F("1.txt");
const int A::VAL2 = F("2.txt");
int F(const std::string filename)
{
std::ifstream file(filename);
int result = 0;
file >> result;
return result;
}
int main () {
std::cout << A::VAL1 << " " << A::VAL2 << "\n";
}
是否保证静态成员总是在创建对象之前被初始化,因为这就是我想要的:/
最佳答案
静态数据成员即使在类的实例不存在时也存在,这保证在创建具有自动存储的实例时存在初始化的静态成员。
一个异常(exception)是,当在同一个翻译单元中的静态成员初始化之前声明了一个具有静态存储的类的实例时,静态变量按照它们出现的顺序进行初始化。
关于c++ - 用函数初始化的静态常量的初始化顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39255238/