如何为= 0创建C 分配运算符



在C 中,可以以0个不带施法的值的值来初始化指针类型(void*/int*/char*(,但这对任何其他值都不起作用。是否可以将相同的行为灌输到定义的类中?=0构造函数或==0比较器?为了进行澄清,我正在尝试添加语法,以便可以将我的n维向量类分配给使用vec<n> dir = 0

的零向量。

编辑:使用void*作为构造函数参数的类型实际上是在起作用的,这是实现此目标的最佳方法吗?

从字面的 0nullptr有一个隐式转换, nullptr的类型为 nullptr_t

因此,以下作品按照您想要的方式:

// Needed for nullptr_t
#include <cstddef> 
struct A
{
    A(std::nullptr_t) {}
};
int main()
{
    A a = 0;
}

当然,这也意味着A a = nullptr是有效的,但也许您可以使用它...

,您可能可以使用一些现代constexpr和模板Shenanigans通过nullptr_t进行间接完成此操作。

您无法制作一个接受的构造函数。

#include <cstddef>
class Foo
{
    Foo(); // Construct from nothing at all
    Foo(std::nullptr_t) // Construct from the null pointer value
};

分别使用

Foo foo_default;
Foo foo_null = nullptr;

因为0也是一个无效的指针值,因此您可以使用std::nullptr_t过载。

Foo foo_zero = 0; // calls Foo(std::nullptr_t)

最新更新