我有以下用例,一个带有一些boolean和int变量的结构
struct a {
int field1;
bool field2;
bool field3;
};
Run Code Online (Sandbox Code Playgroud)
我正在重构这段代码,并为struct编写构造函数,问题是字段的默认初始化.
我不是在批评任何语言构造,但理想情况下我希望null成为语言本身的一部分
我的意思是我应该能够为结构a定义为
a : field1(null.int), field2(null.bool), field3(null.bool) {}
Run Code Online (Sandbox Code Playgroud)
C++不允许它,因为没有定义null.int或null.bool.在C++中唯一的方法是
a: field1(-1), field2(false), field3(false) {}
Run Code Online (Sandbox Code Playgroud)
你可以做
struct a {
a():field1(), field2(), field3() { }
int field1;
bool field2;
bool field3;
};
Run Code Online (Sandbox Code Playgroud)
并且所有字段将分别为零和假.如果你想说这些字段具有不确定的值,我担心你必须使用其他技术.一个是使用boost::optional:
struct a {
a():field1(int()), field2(bool()) { }
optional<int> field1;
optional<bool> field2;
optional<bool> field3;
};
Run Code Online (Sandbox Code Playgroud)
叶子field3不确定.使用访问值*field_name.用field == boost::none或测试无值if(field) { ... }.
如果您正在寻找值为 {true, false, null} 的类型,则该类型不是 bool。然而,boost::optional<bool>是这样一种类型。以同样的方式,boost::optional<int> 可以容纳任何 int,或者根本没有 int。
[编辑] 或者std::optional,从 C++17 开始。