如何为= 0创建C ++赋值运算符

时间:2019-05-23 07:55:28

标签: c++ constructor comparator

在c ++中,可以将指针类型(void* / int* / char*初始化为0值,而无需类型转换,但这不适用于任何其他值。是否可以将相同的行为灌输到已定义的类中? =0构造函数还是==0比较器?为了澄清起见,我尝试添加语法,以便可以使用vec<n> dir = 0

将我的n维向量类分配给零向量。

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

2 个答案:

答案 0 :(得分:3)

您不能使构造器仅接受 文字值0。有几件事很接​​近。

#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)

答案 1 :(得分:3)

存在从文字0nullptr的隐式转换,并且nullptr的类型为nullptr_t

因此,以下内容可以按您想要的方式工作:

// Needed for nullptr_t
#include <cstddef> 

struct A
{
    A(std::nullptr_t) {}
};

int main()
{
    A a = 0;
}

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

很可能您可以通过一些现代nullptr_t和模板恶作剧而无需通过constexpr进行间接操作。