gpt4 book ai didi

c++ - std::bind 和 std::thread 总是复制参数背后的基本原理是什么?

转载 作者:可可西里 更新时间:2023-11-01 15:38:17 27 4
gpt4 key购买 nike

众所周知,std::bind 和 std::thread 的默认行为是它将复制(或移动)传递给它的参数,并且要使用引用语义,我们将不得不使用引用包装器。

  1. 有谁知道为什么这是一个很好的默认行为?特别是在具有右值引用和完美转发的 C++11 中,在我看来,完美转发参数更有意义。

  2. std::make_shared 虽然并不总是复制/移动,但只是完美地转发提供的参数。为什么这里会出现两种看似不同的转发参数行为呢? (总是复制/移动的 std::thread 和 std::bind 与不复制/移动的 std::make_shared 相比)

最佳答案

make_shared 转发到正在调用的构造函数现在。如果构造函数使用引用语义调用,它将获取引用;如果它确实按值调用,它将制作一个拷贝。这两种方式都没有问题。

bind 创建对函数的延迟调用,当本地上下文可能消失时,该函数将在未来的某些未知点调用。如果 bind 使用完美转发,您将必须复制通常按引用发送且在实际调用时未知的参数,将它们存储在某处,并进行管理存储。使用当前的语义,bind 会为您完成。

关于c++ - std::bind 和 std::thread 总是复制参数背后的基本原理是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10503258/

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