int
这是我们正在谈论的32位。您的变量的性质是什么 - 您确定所有 4294967296 个可能的值都同样可能和有效吗?在绝大多数情况下,您可以将特定的 int 值(零、-1 或十亿)指定为“非值”,并像对待 null 一样对待它。仔细考虑您的列表,看看您是否可以选择一个不可能出现在列表中的值,如果有,则将其视为空值。
我能想到的所有可能的 int 值都同样有效的唯一用例是 32 位散列或校验和(如 CRC32)。
所有其他方法都失败了,旋转您自己的可为空原语的实现相当容易。基本情况如下:
template<typename T>
class Nullable<T>
{
T _Value;
bool _IsNull;
public:
Nullable<T>();
Nullable<T>(T);
Nullable<T>(Nullable<T> &);
Nullable<T> &operator=(Nullable<T> &);
Nullable<T> &operator=(T);
operator T(); //Value extractor
bool IsNull(); //Nullity extractor
};
And so forth. You won't need a destructor. You can even throw an exception if they're trying to extract the value from a null object.