C++ C++;——如何初始化成员函数中的静态变量? void ClassA::Func() { 静态地图; mapIntStr[0]=m_memberVariable0;

C++ C++;——如何初始化成员函数中的静态变量? void ClassA::Func() { 静态地图; mapIntStr[0]=m_memberVariable0;,c++,C++,这是我所知道的唯一选项。所以你有了选择。在第一次创建ClassA对象时,在func中甚至在构造函数中初始化一次映射(这两个对象的更好版本),并承受对empty()几乎无需调用的开销,它很可能只有在正确内联之后才是一条指令,不会产生任何开销,或者使用静态初始化函数。创建一个内部结构,然后初始化该结构的构造函数中的所有内容,然后声明该结构的静态变量 //in ClassA.h class ClassA{ public: void Func(); static map<int,stri

这是我所知道的唯一选项。所以你有了选择。在第一次创建
ClassA
对象时,在func中甚至在构造函数中初始化一次映射(这两个对象的更好版本),并承受对
empty()几乎无需调用的开销
,它很可能只有在正确内联之后才是一条指令,不会产生任何开销,或者使用静态初始化函数。

创建一个内部结构,然后初始化该结构的构造函数中的所有内容,然后声明该结构的静态变量

//in ClassA.h
class ClassA{
public:
  void Func();

  static map<int,string> InitStatic();
  static map<int,string> mapIntStr;
};

//in ClassA.cpp
#include "ClassA.h"
void ClassA::Func(){
  // use mapIntStr
}

map<int,string> ClassA::InitStatic(){
  map<int,string> ret;
  // init ret
  return ret;
}

map<int,string> ClassA::mapIntStr = ClassA::InitStatic();
对于您的情况:

void fun()
{
    struct setter
    {
         setter(){}
    };

    static setter setup;
}
void ClassA::Func()
{
结构映射:公共标准::映射
{
地图()
{
(*这个)[0]=某物;
(*这)[1]=某种东西;
}
}
静态地图;
}

这不是一个静态成员变量,有什么具体原因吗?这不是最好的解决方案b/c CPU会浪费时间检查if条件——当然谢谢。最好的解决方案是其他的,brb,在中编辑。非常感谢你的建议。正如我在问题中提到的,我正在寻找d与调用静态函数初始化mapIntStr不同。--谢谢you@q0987:您似乎没有意识到几个CPU周期有多小。
//in ClassA.h
class ClassA{
public:
  void Func();

  static map<int,string> InitStatic();
  static map<int,string> mapIntStr;
};

//in ClassA.cpp
#include "ClassA.h"
void ClassA::Func(){
  // use mapIntStr
}

map<int,string> ClassA::InitStatic(){
  map<int,string> ret;
  // init ret
  return ret;
}

map<int,string> ClassA::mapIntStr = ClassA::InitStatic();
void fun()
{
    struct setter
    {
         setter(){}
    };

    static setter setup;
}
void ClassA::Func()
{
     struct Map : public std::map<int, string>
     {
          Map()
          {
              (*this)[0] = something;
              (*this)[1] = somethingElse;
          }
     }
     static Map map;
}