首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将C++对象赋值为空

问将C++对象赋值为空
EN

Stack Overflow用户
提问于 2011-02-17 22:46:55
回答 4查看 619关注 0票数 5

我正在看一些使用Boost.Function的代码,我有一个问题,那就是如何编写代码来允许赋值为空。我试图找到相应的Boost代码,但无法找到。基本上,是什么使这成为可能?

代码语言:javascript
复制
boost::function<void()> func;
func = NULL;

编辑:下面的代码对我来说是不能编译的,那么他们是如何防止这种情况的呢?

代码语言:javascript
复制
func = 1;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-17 23:06:43

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

代码语言:javascript
复制
#ifndef BOOST_NO_SFINAE
   self_type& operator=(clear_type*)
   {
     this->clear();
     return *this;
   }
#endif

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

代码语言:javascript
复制
TEST_F(CppTest, BoostFunctions) {
    boost::function<void()> func;
    func = NULL;
    ASSERT_TRUE(func==NULL);
    ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}
票数 3
EN

Stack Overflow用户

发布于 2011-02-17 22:51:23

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

代码语言:javascript
复制
boost::function<void()> *pFunc;
pFunc = NULL;

顺便说一句,在C++中,你通常会写0或者nullptr而不是NULL。

票数 1
EN

Stack Overflow用户

发布于 2011-02-17 23:19:10

boost::function可以在其赋值操作符中接受指向函数的指针。指针可以是有效的指针或NULL (表示0)。尝试传递int时出现错误的原因是不能将整数赋值给指针。它类似于尝试执行以下操作:

代码语言:javascript
复制
char* c = 1;

它也不会编译。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5030437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档