gpt4 book ai didi

c++ - 当我将 lambda 表达式复制到 std::function 时出了什么问题

转载 作者:行者123 更新时间:2023-11-30 03:19:07 25 4
gpt4 key购买 nike

<分区>

代码会编译出错

class A
{

};

int main()
{
auto a = std::make_unique<A>();
std::function<void()> fun = [ap = std::move(a)](){

};
}

但在我使用 auto 而不是 std::function 之后就没问题了

class A
{

};

int main()
{
auto a = std::make_unique<A>();
auto fun = [ap = std::move(a)](){

};
}

错误是这样的:

C:/Qt/Qt5.11.1/Tools/mingw530_32/i686-w64-mingw32/include/c++/functional:1710:34: error: use of deleted function 'main()::<lambda()>::<lambda>(const main()::<lambda()>&)'
__dest._M_access<_Functor*>() =
^
C:\Users\Xiaopeng\CLionProjects\testGP\main.cpp:98:51: note: 'main()::<lambda()>::<lambda>(const main()::<lambda()>&)' is implicitly deleted because the default definition would be ill-formed:
std::function<void()> fun = [ap = std::move(a)](){
^
C:\Users\Xiaopeng\CLionProjects\testGP\main.cpp:98:51: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = A; _Dp = std::default_delete<A>]'
In file included from C:/Qt/Qt5.11.1/Tools/mingw530_32/i686-w64-mingw32/include/c++/memory:81:0,
from C:\Users\Xiaopeng\CLionProjects\testGP\main.cpp:3:
C:/Qt/Qt5.11.1/Tools/mingw530_32/i686-w64-mingw32/include/c++/bits/unique_ptr.h:356:7: note: declared here
unique_ptr(const unique_ptr&) = delete;
^

当用户使用 std::function 时我的代码有什么问题?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com