gpt4 book ai didi

c++ - 具有排序问题的结构的静态数据成员的命名空间

转载 作者:行者123 更新时间:2023-11-28 07:37:24 25 4
gpt4 key购买 nike

我有如下代码,我遇到了静态对象顺序创建问题。

h1.hpp

namespace X {

struct XX {
static const string str1;
static const string str2;
};
}

h1.cpp

namespace X {

const string XX::str1 = "Hello World";
const string XX:str2 = "Hello Country";
}

h2.cpp ----> included h1.hpp
h3.cpp ----> included h1.hpp
h4.cpp ----> included h1.hpp
------

我想以 [X::XX::str1] 的形式访问它

func1(X::XX::str1); etc.

什么是最好的方法,因为上面的方法给了我一些静态对象创建顺序问题,当我尝试访问 X::XX::str1 时,我得到的是空而不是“Hello World”。我如何确保不是在创建本地拷贝的每个地方都使用相同的对象 (X::XX:str1)。

更新信息:

实际上,当我访问 X::XX::str1 程序段错误时。所以没有创建对象?

最佳答案

这应该有效。如果您从另一个静态对象的构造函数调用 func1,则只能存在静态顺序初始化问题。

如果是这种情况,您可以通过静态成员函数访问 XX 中的静态变量,这些成员函数返回对函数局部静态变量的引用。调用该函数将保证对象被初始化。

#include <iostream>
#include <string>

struct XX {
static std::string& str1()
{ static std::string x = "Hello World"; return x; }
static std::string& str2()
{ static std::string x = "Hello Country"; return x; }
};

int main()
{
std::string& x = XX::str1();
std::cout << x << std::endl;
std::cout << XX::str2() << std::endl;

return 0;
}

关于c++ - 具有排序问题的结构的静态数据成员的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16507707/

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