gpt4 book ai didi

c++ - 为什么构造 std::thread 时参数 move 了两次

转载 作者:行者123 更新时间:2023-12-01 16:26:03 25 4
gpt4 key购买 nike

考虑一下这个程序,它本质上创建了 std::thread,它以 arg 作为参数调用函数 func():

#include <thread>
#include <iostream>

struct foo {
foo() = default;
foo(const foo&) { std::cout << "copy ctor" << std::endl; }
foo(foo&&) noexcept { std::cout << "move ctor" << std::endl; }
};

void func(foo){}

int main() {
foo arg;
std::thread th(func, arg);
th.join();
}

我的输出是

copy ctor
move ctor
move ctor

据我所知,arg 在线程对象内部复制,然后作为右值( move )传递给 func()。因此,我期望一次拷贝构建一次 move 构建

为什么要进行第二步构建?

最佳答案

您按值将参数传递给 func,这应该构成第二步。显然,std::thread 在调用 func 之前在内部再次存储它,据我所知,这在标准方面是绝对合法的。

关于c++ - 为什么构造 std::thread 时参数 move 了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49703908/

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