gpt4 book ai didi

c++ - 如何避免在 C++ 中使用非原始静态类变量的问题?

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:22 28 4
gpt4 key购买 nike

我已经阅读了很多关于 C++ 中静态类变量初始化的内容,虽然谷歌编码标准说只能创建普通旧数据的静态(即原语和指针),但我在网上和书中看到了很多例子作者违反该准则的地方。

我还读到,只要将静态变量保存在单个编译单元中,就不太可能遇到未定义的初始化问题。

好吧...所以话虽如此...我想要一些专家意见,看看我是否会在使用看起来像...的代码时遇到一些问题

//header file snippet
struct TheStruct {
string theString;
string theString2;
float theFloat;
};

class TheClass {
public:
static const TheStruct Dude;
static const TheStruct Blah;
static const TheStruct TheStructArray[];

TheClass();
virtual ~TheClass();
TheStruct getCurrent();
private:
TheStruct current;
}

//impl file snippet
const TheStruct TheClass::Dude = { "Dude", "Dude", 0 };
const TheStruct TheClass::Blah = { "Blah", "Blah", 0 };
const TheStruct TheClass::TheStructArray[] = {TheClass::Dude, TheClass::Blah};

TheClass::TheClass() : current(TheClass::Dude) {}
TheClass::~TheClass() {}
TheStruct TheClass::getCurrent() {return current;}

我认为 getCurrent() 方法没问题。静态常量 DudeBlah 包装在一个静态数组 TheStructArray 中,将来会用到。但是,我猜如果它被其他类使用,我仍然会遇到数组问题?例如,GUI 可以使用该数组来呈现可供选择的有效选项。

我来自 Java 背景,所以我经常使用 private static final 来定义一些有效的“状态”......

谢谢!

最佳答案

//impl file snippet
const TheStruct TheClass::Dude = { "Dude", "Dude", 0 };
const TheStruct TheClass::Blah = { "Blah", "Blah", 0 };
const TheStruct TheClass::TheStructArray[] = {TheClass::Dude, TheClass::Blah};

只要这三行按顺序写,你的代码就没有问题,因为它们是按照提到的顺序初始化的,所以你不会遇到 static initialization order fiasco。 .否则,你应该通过 this link阅读您可能会遇到的问题,以及什么 solution您必须提供。

关于c++ - 如何避免在 C++ 中使用非原始静态类变量的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4934635/

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