Joh*_*ohn 36 c++ null object is-empty stdoptional
在我的代码中,我检查以查看对象是否为空/空.
有没有办法将对象设置为null?
Bri*_*ndy 45
类的对象不能设置为NULL; 但是,您可以将指针(包含对象的内存地址)设置为NULL.
你不能做什么的例子:
Cat c;
c = NULL;//Compiling error
Run Code Online (Sandbox Code Playgroud)
你可以做什么的例子:
Cat c;
//Set p to hold the memory address of the object c
Cat *p = &c;
//Set p to hold NULL
p = NULL;
Run Code Online (Sandbox Code Playgroud)
虽然在C++中对象不能是"空/空",但在C++ 17中,我们必须std::optional
表达这种意图.
使用示例:
std::optional<int> v1; // "empty" int
std::optional<int> v2(3); // Not empty, "contains a 3"
Run Code Online (Sandbox Code Playgroud)
然后,您可以检查是否optional
包含值
v1.has_value(); // false
Run Code Online (Sandbox Code Playgroud)
要么
if(v2) {
// You get here if v2 is not empty
}
Run Code Online (Sandbox Code Playgroud)
int
然而,普通(或任何类型)在任何有用的意义上都不能是"空"或"空"(通过你对这些词的定义).std::optional
在这方面可以视为一个容器.
如果您手头没有符合C++ 17的编译器,则可以使用boost.optional.一些pre-C++ 17编译器也提供std::experimental::optional
,它们的行为至少接近实际的std::optional
afaik.有关详细信息,请查看编译器手册.
您可以设置任何指向 的指针NULL
,但NULL
在 C++ 中只是简单地定义为 0:
myObject *foo = NULL;
Run Code Online (Sandbox Code Playgroud)
另请注意,NULL
如果包含标准标头,则已定义,但未内置到语言本身中。如果NULL
未定义,则可以使用 0 代替,或包括以下内容:
#ifndef NULL
#define NULL 0
#endif
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你真的想设置一个对象,而不是一个指针,到NULL
,你可以阅读Null Object Pattern。
归档时间: |
|
查看次数: |
100045 次 |
最近记录: |