我正在实现一个 SI 单位类型系统。为了确保单位不会漏进和漏出,我不希望将任何值隐式转换为单位,反之亦然。但是,能够将 0 转换为我的单位系统真的很方便,有点像你可以用指针做的那样,其中 0 隐式转换为空指针,但没有其他值可以。
所以我的问题是:我可以复制这种从 0 到空指针的隐式转换吗?或者我可以利用它来实现同样的目标吗?
例如,您会如何看待这样的构造函数?
constexpr unit_t(void*) : _value(0) { }
注意:单位本身是在类型中,而不是在值中。
编辑:为什么要从 0 转换为单位?
我想要这个的原因是编写不了解单位的算法。例如,如果您有一个长度矩阵并且想要反转它,您首先计算它的行列式,如果它不为 0,则返回逆矩阵(否则,这是一个错误)。
因此,将 0 文字视为通用单元会很方便。这正是指针所发生的事情。您可以键入:
void* c = 0;
但不是:
void f(int a) { void *c = a; }