gpt4 book ai didi

c++ - 如何检查 boolean 值是否在 C++ 中未初始化?

转载 作者:行者123 更新时间:2023-11-28 02:32:52 25 4
gpt4 key购买 nike

我想为对象的某些(难以计算的) boolean 属性创建一个缓存。我想到的结构如下:

   class Obj; 
struct ObjProperties
{
bool property1;
bool property2;
// etc.
};
std::unordered_map<const Obj*, ObjectProperties> cache;

现在我想拥有类似这样的功能

bool hasProperty1()
{
if /*(cache[property1] is uninitialized)*/
cache[property1] = calculateProperty1();
return cache[propery1];
}

然而,我如何检查一个 boolean 值是否未初始化? Property1 可以是 true 或 false,所以我不能将它初始化为一个值...

我看到两种处理方法:

1) 使我的结构 bool* 的成员成为指针。然后我可以检查 nullptr,但这使我的函数有点麻烦,因为我必须new/delete 我所有的 boolean 对象

2) 使我的结构的成员int。然后我可以将它们初始化为 -1 并分配 0(假)或 1(真)。但这使我的代码不那么明显。毕竟,这些属性是 boolean 值,我的缓存结构实际上也包含一些(真实的)整数和 double 。

处理此问题的最佳方法是什么?还是我忽略了一些非常简单的测试来检查 boolean 值是否未初始化?

最佳答案

如果您只有几个属性:

class ObjProperties
{
bool property1;
bool property1_valid;
bool property2;
bool property2_valid;

ObjProperties() : property1_valid(false), property2_valid(false)
{}
}

你可以实现一个特殊的属性类型:

struct BoolProperty
{
bool value;
bool valid;
BoolProperty() : value(false), valid(false) {}
BoolProperty(bool value) : value(value), valid(true) {}
BoolProperty &operator=(const bool &arg)
{
value = arg;
valid = true;
}
bool isValid() const { return valid; }
...
}
class ObjProperties
{
BoolProperty property1;
BoolProperty property2;
}

或者你可以使用一些位域:

class ObjProperties
{
bool property1;
bool property2;
int property1_valid:1;
int property2_valid:1;
}

关于c++ - 如何检查 boolean 值是否在 C++ 中未初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28486096/

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