\_(ツ)_/
小朋友,你要问问题,就该是你把问题的实质提取出来。
你贴了一段代码,但问题的实质根本不在这段代码之中,还要逼人去github上读小作坊ThreadPool的实现。
然后讨论起来你反反复复拿你这段代码说事,你到底想怎么样?
我把这个错误的原理写成了一段极简示例代码如下:
=================================================================
template <typename F>
struct Bad {
F&& f;
Bad(F&& f) : f(std::forward<F>(f)) {}
};
template <typename F>
std::unique_ptr<Bad<F>> make_bad(F&& f) {
return std::make_unique<Bad<F>>(std::forward<F>(f));
}
void foo(int x) {}
int main() {
auto x = make_bad(std::bind(foo, 3));
std::function<void()> member = std::bind(foo, 3);
auto y = make_bad(member);
cout << typeid(x->f).name() << "\n";
cout << typeid(y->f).name() << "\n";
// x->f(); // Error
y->f();
return 0;
}
【 在 xunery (寻) 的大作中提到: 】
: 标 题: Re: 关于c++的右值引用的一个问题
: 发信站: 水木社区 (Fri Dec 18 13:40:29 2020), 站内
:
: 你说的语法语义都知道,根本就不是问的这个
: 你说的有问题的写法跑起来是对的
: 没问题的写法跑起来是错的,所以我才来问怎么解释
:
: 如果你真明白
: 把你认为正确的代码写出,是不是语法语义都正确,跑起来也没问题。
: 跑一跑就知道了
:
:
:
: 【 在 xunery 的大作中提到: 】
: : 你搞明白我问的问题了吗?
: : 你说这些简单的语法语义学过的都知道。
: : 我也知道是ThreadPool得问题
: : ...................
:
: --
:
: ※ 来源:·水木社区
http://www.newsmth.net·[FROM: 115.171.170.*]
--
FROM 76.126.252.*