我正在用C++重新设计一个类构造函数,需要它来捕获一个未指定的bool.我已经为所有其他参数使用了默认值,但是根据我的理解,bool只能初始化为true或false.由于这两种情况都在类中有意义,我应该如何处理从默认值检查更改?
Ste*_*eld 40
现实是你不能这样做.bool具有值,无论是true还是false,如果您尚未初始化它,则它是随机的true或false,在程序的每次运行或该类的分配时可能不同.
如果需要具有更多选项的类型,请定义枚举.
typedef enum MyBool {
TRUE,
FALSE,
FILENOTFOUND
} MyBool;
Run Code Online (Sandbox Code Playgroud)
Dan*_*nas 36
三态布尔是走向黑暗面的道路.三态布尔导致愤怒.愤怒导致仇恨.仇恨导致痛苦.
不想使用三态布尔.
相反,使用一个额外的布尔值来判断第一个布尔值是否"初始化"(或更好,"已知").
class Prisoner : public Person
{
...
bool is_veredict_known;
bool is_guilty;
}
Run Code Online (Sandbox Code Playgroud)
如果尚不知道veredict,你无法判断囚犯是否真的有罪,但你的代码可以区分不同的情况.当然宪法保证is_guilty的默认值应该是假的,但是,仍然......
顺便说一下,类不变量应该包括:
assert(is_veredict_known || !is_guilty);
Run Code Online (Sandbox Code Playgroud)
Jos*_*ley 18
听起来你想要boost :: tribool或者boost :: optional <bool>.
如果这是您需要的,请创建一个值,该值表示可能尚未初始化的值的概念.
template <typename T>
struct Maybe {
Maybe() : m_hasValue(false) {}
bool HasValue() const { return m_hasValue; }
T& Value() { ThrowIfFalse(m_hasValue); return m_value; }
const T& Value() const { ThrowIfFalse(m_hasValue); return m_value; }
void SetValue( _In_ const T& value) { m_value = value; m_hasValue = true; }
private:
bool m_hasValue;
T m_value;
};
Run Code Online (Sandbox Code Playgroud)
现在您可以代表您需要的所有3个州.
class SomeType {
...
Maybe<bool> m_myBool;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
49727 次 |
| 最近记录: |