gpt4 book ai didi

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

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

考虑这个基本上创建 std::thread 的程序调用函数 func()arg作为论据:

#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在线程对象内部复制,然后传递给 func()作为右值( move )。所以,我希望 一式建筑一招施工 .

为什么要进行二次施工?

最佳答案

您将参数传递给 func按值(value),这应该构成第二个 Action 。显然 std::thread在调用 func 之前在内部再存储一次,就标准而言,AFAIK 是绝对合法的。

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

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