我已经看到一些代码在C中模拟了Optional / Nullable值作为仅在对象存在时分配的指针。所以它看起来像这样:
typedef struct X_str {
int *field_a;
} X;
void do_initialization(X* obj) {
obj->field_a = malloc(sizeof(int));
*(obj->field_a) = // assign some value here
}
void do_processing_elsewhere(X* obj) {
if (obj->field_a == NULL) {
// Do no processing related to field_a
} else {
// Do some processing related to field_a
}
}
恕我直言,这至少是做这种事情的奇怪方式,因为内存分配器会因为没有特殊原因而碎片化。有没有一种正确的方法来做类似Nullable的行为(如果你没有可以隐含地产生null的难以辨认的对象比较)?字段是公共的,因此提供访问器功能(可以更新位存在标志)不会给予太多,除非你强加人们会使用它们。语言是C而不是C ++(存在其他解决方案)。