[英]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.