首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么C++ 11不能将不可复制的仿函数移动到std :: function?

这个问题涉及到C++11的标准库中的std::function和移动语义。在C++11中,std::function是一个通用的函数包装器,它可以将函数和可调用对象存储为一个类型安全的可调用对象。但是,当我们使用不可复制的仿函数时,我们不能将其移动到std::function中,这是因为std::function需要对其内部的可调用对象进行复制,以便在需要时进行调用。

具体来说,std::function需要对其内部的可调用对象进行复制,以便在需要时进行调用。但是,如果我们使用的是不可复制的仿函数,那么这个复制操作就会失败,因为不可复制的仿函数不能被复制。这就是为什么我们不能将不可复制的仿函数移动到std::function中的原因。

为了解决这个问题,我们可以使用std::move将不可复制的仿函数移动到std::function中。这样,我们就可以避免复制操作,从而避免了不可复制的仿函数的问题。

总之,std::function需要对其内部的可调用对象进行复制,以便在需要时进行调用。如果我们使用的是不可复制的仿函数,那么这个复制操作就会失败。为了解决这个问题,我们可以使用std::move将不可复制的仿函数移动到std::function中,从而避免复制操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一文入魂:妈妈再也不用担心我不懂C++移动语义了!

导语 | 移动语义是从C++11开始引入的一项全新功能。本文将为您拨开云雾,让您对移动语义有个全面而深入的理解,希望本文对你理解移动语义提供一点经验和指导。 一、为什么要有移动语义 (一)从拷贝说起 我们知道,C++中有拷贝构造函数和拷贝赋值运算符。那既然是拷贝,听上去就是开销很大的操作。没错,所谓拷贝,就是申请一块新的内存空间,然后将数据复制到新的内存空间中。如果一个对象中都是一些基本类型的数据的话,由于数据量很小,那执行拷贝操作没啥毛病。但如果对象中涉及其他对象或指针数据的话,那么执行拷贝操作就可能会

02
领券