繁体   English   中英

如何传递nullptr作为参数?

[英]How do I pass a nullptr as an parameter?

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。

如果确实要保留此方法:

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

但是仍然希望能够将z设置为nullptr ,可以为Bar添加一个重载,该重载专门采用nullptr参数:

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

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

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

Foo* foo = new Foo(); 

foo -> Bar(nullptr);

注意:使用前需要为foo pointer分配对象,否则行为是不确定的。

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

int &v = nullptr;

海湾合作委员会抱怨:

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;
}
void Foo::Bar(Baz* x)
{
z = x;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM