在我的代码中,我进一步检查对象是否为空/空。
有没有办法将对象设置为空?
类的对象不能设置为NULL;但是,您可以将指针(包含对象的内存地址)设置为 NULL。
您所要求的不能做的事情的示例:
Cat c;
c = NULL;//Compiling error
您可以做什么的示例:
Cat c;
//Set p to hold the memory address of the object c
Cat *p = &c;
//Set p to hold NULL
p = NULL;
虽然在 C++ 中对象不能为“空/空”,但在 C++17 中,我们用
std::optional
来表达这一意图。
使用示例:
std::optional<int> v1; // "empty" int
std::optional<int> v2(3); // Not empty, "contains a 3"
然后您可以检查
optional
是否包含带有 的值
v1.has_value(); // false
或
if(v2) {
// You get here if v2 is not empty
}
然而,普通的 int
(或任何类型)在任何有用的意义上永远不能是“null”或“empty”。在这方面,将
std::optional
视为一个容器。如果您手头没有符合 C++17 的编译器,则可以使用
boost.Optional 代替。一些 C++17 之前的编译器还提供 std::experimental::optional
,其行为至少应该接近实际的
std::optional
。有关详细信息,请检查编译器手册。
NULL
,尽管
NULL
在 C++ 中简单地定义为 0:
myObject *foo = NULL;
另请注意,如果包含标准标头,则会定义
NULL
,但不会内置到语言本身中。 如果
NULL
未定义,您可以使用 0 代替,或包含以下内容:
#ifndef NULL
#define NULL 0
#endif
顺便说一句,如果您确实想将对象而不是指针设置为
NULL
,您可以阅读有关空对象模式。
在 C++ 中,NULL 指针与指向“空”对象的指针非常不同。
bool IsEmpty()
拥有类似
A* p = new A; ... p = NULL;
您可能想要这样做
class Null {}; Null _NULL;
也许您应该向我们发布一些有关上下文的详细信息,以帮助您更好地使用选项 4。
什么类型的“对象”?
NULL
nullptr
)分配给指针类型的对象,并且如果您可以将
NULL
分配给算术类型的对象,则它是实现定义的。
如果您指的是某种类类型的对象,答案是NO(除了具有
operator=
接受指针或算术类型的类)
“空”更合理,因为许多类型都具有复制分配和默认构造(通常是隐式的)。要查看现有对象是否类似于默认构造的对象,您还需要一个适当的
bool operator==
MyClass ObjectName = *static_cast<MyClass*>(nullptr);
void* check = &ObjectName;
if(check){**object is NOT null**}
else {**object IS null**}
英特尔检查器没有发现任何内存错误,所以我认为它是安全的,至少适合我的需求。 只要您不取消引用 ObjectName 并仅使用其地址,它就可以工作
是的,可以使用 NULL 关键字和以下方法在许多编程语言中将 null 值分配给任何数据类型的变量 int a =“NULL”; 这里 int 是变量 a 的数据类型,通过这种方法将 NULL 值赋给变量 a。