如何将nullptr作为参数传递?

时间:2014-03-11 09:21:22

标签: c++ nullptr

void Foo::Bar(Baz& x)
{
z = &x;
}

Foo* foo;

foo -> Bar(nullptr);

我正在尝试使用typedef创建一个通用模板Baz。 由于z是私有的并且属于Foo,因此我无法将nullptr分配给z。

如果可能的话,我想在没有改变太多实现的情况下将z设置为nullptr的最佳方法 - 除非这对实现来说很糟糕。

我在想也许

  

(Baz *)0,或*(void *)0或Nullable Class   

4 个答案:

答案 0 :(得分:7)

如果你想保留这种方法:

void Foo::Bar(Baz& x)
{
  z = &x;
}

但仍希望能够将z设置为nullptr,您可以为Bar添加一个特别需要nullptr参数的重载:

void Foo::Bar(std::nullptr_t nullp)
{
  z = nullp;
}

答案 1 :(得分:2)

如果希望Foo::Bar采用nullptr,则需要将参数更改为指针类型:

void Foo::Bar(Baz* x)
{
   z = x;
}

Foo* foo = new Foo(); 

foo -> Bar(nullptr);

注意:在使用之前需要为foo pointer分配对象,否则行为是未定义的。

答案 2 :(得分:1)

nullptr是指针,不是有效的引用:

int &v = nullptr;

gcc抱怨道:

bla.cpp:1:10: error: invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘std::nullptr_t’
 int &v = nullptr;

所以你不能把它作为参考参数传递。如果您希望能够传递它,请将x更改为(可能是const)指针:

void Foo::Bar(Baz* const x) {
   z = x;
}

答案 3 :(得分:0)

void Foo::Bar(Baz* x)
{
z = x;
}

Foo* foo;
Baz* ptr = NULL;
foo -> Bar(ptr);