gpt4 book ai didi

c++ - 在一个函数中静态初始化多个静态变量

转载 作者:太空狗 更新时间:2023-10-29 20:28:45 32 4
gpt4 key购买 nike

你好,我有静态 std::map 和一些值,静态迭代器指向这样的默认元素,并同时初始化两者:

在.h文件中

class foo
{
static std::map<std::string, int> sqlenumToInt;
static std::map<std::string, int> initEnumToInt();
static std::map<std::string, int>::iterator defaultIt;
};

在.c文件中

std::map<std::string, int> foo::sqlenumToInt = initEnumToInt();

std::map<std::string, int> foo::defaultIt = std::map<std::string, int>::iterator();

std::map<std::string, int> foo::initEnumToInt();
{
std::map<std::string, int> test;
defaultIt = test.insert(std::make_pair("a", 0)).first
test["b"] = 2;
test["c"] = 3;
test["d"] = 4;
return test;
}

静态变量初始化的默认顺序是什么。将默认它只是 std::map::iterator()或指向 sqlenumToInt 的第一个元素的迭代器 ??

最佳答案

在翻译单元中,静态变量的初始化顺序是明确定义的;静态变量按定义顺序初始化。所以 initEnumToInt 运行 before foo::defaultIt 被初始化。在您的代码中,这将导致未定义的行为,因为在 initEnumToInt 运行时,foo::defaultIt 处于未初始化(但零初始化)状态;然后,您将在零初始化对象上调用 operator=,然后调用需要零初始化或未初始化对象的构造函数。

关于c++ - 在一个函数中静态初始化多个静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299548/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com