gpt4 book ai didi

c++ - 如何将 0(且仅 0)转换为我的数据结构

转载 作者:行者123 更新时间:2023-11-28 03:35:27 25 4
gpt4 key购买 nike

我正在实现一个 SI 单位类型系统。为确保单位不会漏进漏出,我不想将任何值隐式转换为单位,反之亦然。但是,能够将 0 转换为我的单位系统会非常方便,有点像您可以对指针所做的那样,其中 0 隐式转换为空指针,但没有其他值。

所以我的问题是:我可以复制这种从 0 到空指针的隐式转换吗?或者我可以利用它来实现同样的目标吗?

例如,您会如何看待这样的构造函数?

constexpr unit_t(void*) : _value(0) { }

注意:单位本身在类型中,不在值中。

编辑:为什么从 0 转换为一个单位?

我想要这个的原因是编写不知道单位的算法。例如,如果您有一个长度矩阵并且想要将其求逆,则首先计算它的行​​列式,如果它不为 0,则返回逆矩阵(否则,这是一个错误)。

因此,将 0 文字视为通用单位会很方便。这正是指针所发生的事情。您可以输入:

void* c = 0;

但不是:

void f(int a) { void *c = a; }

最佳答案

经典的解决方案是指向某个用户无法命名的私有(private)类型的指针。那样的话,他获得匹配内容的唯一方法是通过 0 的隐式转换。 (使用 void* 意味着几乎任何可以转换为指针的东西都可以传递。)

请注意,此解决方案仅适用于 integral 常量 0。如果用户想使用 0.0(因为他认为 double 值使更有道理),他不能。

您还可以考虑使用默认构造函数,这样客户端在需要默认初始化时只需编写 SomeUnit()

关于c++ - 如何将 0(且仅 0)转换为我的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com