gpt4 book ai didi

c++ - 类的构造函数中的 forward 和 move 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 20:50:36 24 4
gpt4 key购买 nike

<分区>

我读了很多关于它的内容,但仍然无法理解。这两种变体之间有什么区别:

template <typename val_t>
class fact_t: public exp_t<val_t> {
val_t m_value;
public:
fact_t(val_t &&value) : m_value{std::forward<val_t>(value)} {}
};

template <typename val_t>
class fact_t: public exp_t<val_t> {
val_t m_value;
public:
fact_t(val_t &&value) : m_value{std::move(value)} {}
};

有人可以举例说明一种变体会失败但另一种变体仍然有效吗?

我尝试以下一种方式使用第一个变体:

std::string str = "str";
fact_t<std::string> f(str);

但是会导致编译时出错。尽管我从其他主题和 cppreference 了解到 strlvalue 并且 std::forward 允许使用它.我哪里不见了?

P.S. 很抱歉,这是一个愚蠢的问题,但我真的无法理解。

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