C++对象赋值为 NULL

发布于 2024-10-18 04:08:28 字数 338 浏览 1 评论 0原文

我正在查看一些使用 Boost.Function 的代码并有一个关于如何编写代码以允许赋值为 NULL 的问题。我试图找到相应的 Boost 代码,但没有成功。基本上,是什么让这成为可能?

boost::function<void()> func;
func = NULL;

编辑:以下内容不适合我编译,那么他们如何防止这种情况呢?

func = 1;

I was looking at some code that uses Boost.Function and have a question about how code can be written to allow assignment to NULL. I tried to track down the corresponding Boost code, but was unable to. Basically, what makes this possible?

boost::function<void()> func;
func = NULL;

EDIT: The following doesn't compile for me though, so how do they prevent this too?

func = 1;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

绝對不後悔。 2024-10-25 04:08:28

通过带有指针参数的运算符重载。来自 boost 来源:

#ifndef BOOST_NO_SFINAE
   self_type& operator=(clear_type*)
   {
     this->clear();
     return *this;
   }
#endif

这并不意味着“func”本身是 NULL,实际上您可以访问它自己的函数。以下代码可以编译并且不会崩溃。

TEST_F(CppTest, BoostFunctions) {
    boost::function<void()> func;
    func = NULL;
    ASSERT_TRUE(func==NULL);
    ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}

By operator overloading with pointer parameter. From boost sources:

#ifndef BOOST_NO_SFINAE
   self_type& operator=(clear_type*)
   {
     this->clear();
     return *this;
   }
#endif

This doesn't mean that "func" itself is NULL, indeed you can access its own functions. Following code compiles and doesn't crash.

TEST_F(CppTest, BoostFunctions) {
    boost::function<void()> func;
    func = NULL;
    ASSERT_TRUE(func==NULL);
    ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}
意中人 2024-10-25 04:08:28

我不知道你到底想做什么,但这可能会有所帮助:

boost::function<void()> *pFunc;
pFunc = NULL;

顺便说一句,在 C++ 中你大多写 0 或 nullptr 而不是 NULL。

I dont know what exactly you are trying to do but this could help:

boost::function<void()> *pFunc;
pFunc = NULL;

Btw, in C++ you mostly write 0 or nullptr instead of NULL.

请叫√我孤独 2024-10-25 04:08:28

boost::function 可以在其赋值运算符中接受指向函数的指针。指针可以是有效指针或NULL(即0)。尝试传递 int 时出现错误的原因是您无法将整数分配给指针。这就像尝试执行以下操作:

char* c = 1;

也不会编译。

boost::function can accept a pointer to a function in its assignment operator. A pointer can be a valid pointer or NULL (meaning 0). The reason you get an error when trying to pass an int is that you cannot assign an integer to a pointer. It is like trying to do the following:

char* c = 1;

Which won't compile either.

北风几吹夏 2024-10-25 04:08:28

正如您在文档中看到的, std::function 有一个赋值来自 nullptr_t 的运算符

As you can see in the documentation the std::function has an assignment operator from nullptr_t

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文