在C 中,可以以0个不带施法的值的值来初始化指针类型(void*
/int*
/char*
(,但这对任何其他值都不起作用。是否可以将相同的行为灌输到定义的类中?=0
构造函数或==0
比较器?为了进行澄清,我正在尝试添加语法,以便可以将我的n维向量类分配给使用vec<n> dir = 0
编辑:使用void*作为构造函数参数的类型实际上是在起作用的,这是实现此目标的最佳方法吗?
从字面的 0
到 nullptr
有一个隐式转换, 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)