gpt4 book ai didi

c++ - 静态常量字符串不会被初始化

转载 作者:太空狗 更新时间:2023-10-29 19:45:06 25 4
gpt4 key购买 nike

我有一些静态常量字符串作为我的 C++ 类的私有(private)成员。我知道 .h 中的声明和 .cpp 实践中的定义(和初始化)。在类构造函数中,我调用了一个使用这些静态字符串的函数。令人惊讶的是,在构造函数中,字符串保持未初始化(空字符串),这会产生问题。

有人可以指出这里可能出了什么问题吗?我一直在使用静态常量字符串,但从未遇到过这种情况。

更新:m_data 在 utility() 中保持为空。我有一个测试类对象作为另一个类的私有(private)成员。

这是我正在使用的一种代码:

// Test.h
class Test
{
public:
Test();
private:
void utility();

static const std::string m_data;
};

// Test.cpp
const std::string Test::m_data = "Data";

Test::Test()
{
utility();
}

void Test::utility()
{
//use m_data here
}

最佳答案

您的 TEST 类型对象是全局对象吗?

如果是这样,您就会遇到初始化顺序的问题。

即。

int main()
{
std::cout << "Main Entered" << std::endl;
Test t; // This should work
}
Test plop; // This may not work depending

解决方案是使用静态方法获取字符串:

class Test
{
static std::string const& getData()
{
static std::string const data("PLOP");
return data;
}
// STUFF
// Remove this line
// static const std::string m_data;
Test::Test()
{
std::cout << "Test::Test()" << std::endl;
Utility();
}
};
// If "Test::Test()" is printed before "Main Entered"
// You have a potential problem with your code.

关于c++ - 静态常量字符串不会被初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467919/

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