c++ - 用函数初始化的静态常量的初始化顺序

标签 c++ class oop c++11 static

简而言之,我需要使用从文件中获取的某个值来初始化一个 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/

相关文章:

python - 字符串操作像python中的多个字母

c++ - CAN 套接字读取帧延迟

c++ - CUDA TCC 驱动程序是否适用于 Windows 上的 geforce 卡?

java - Java中Integer和int有什么区别?

c++ - 威科比 - 错误 : Explicit instantiation shall not use ‘inline’ specifier [-fpermissive]

java - 操作非静态变量

c++ - 一个类(class)的规模限制是多少?

php - 我应该为每个类使用一个 getter/setter,还是为每个属性使用一个 getter/setter?

javascript - 如何在 JavaScript 中为 namespace 中的对象创建静态成员?

python - 如何将某物称为对象而不是列表?