gpt4 book ai didi

c++ - 为什么在 std::move 中使用 std::remove_reference ?

转载 作者:行者123 更新时间:2023-12-01 14:38:48 25 4
gpt4 key购买 nike

我尝试实现 std::move , 使用 std::remove_reference ,但是没有它似乎也能工作。请给我一个我的实现失败的例子,其中std::remove_reference是必要的。

template <class type> type && move(type & source) { return (type &&) source; }
template <class type> type && move(type && source) { return (type &&) source; }
std::remove_reference仅用于避免过载 std::move ?
这是一个可以帮助您的测试类:
class test {
public :
test() { }
test(const test & source) { std::cout << "copy.\n"; }
test(test && source) { std::cout << "move.\n"; }
};
不是 How does std::move() transfer values into RValues? 的拷贝因为我的问题包括一个似乎表明 std::remove_reference 的例子在这种情况下没用+子问题。

最佳答案

I tried implementing std::move, which uses std::remove_reference, however it seems to work without it.


是的,它正在工作,因为您明确提供了左值引用的重载。虽然 std::remove_reference仅当您使用转发引用时才相关。
如果你取出这条线:
Godbolt
template <class type> type && move(type & source) { return (type &&) source; }
并将您的功能称为:
test t2 = move(t1); //prints copy
要完成这项工作,您必须使用 std::remove_reference . Try on Godbolt :
template <class type>
std::remove_reference_t<type> && move(type && source)
{
return
static_cast<std::remove_reference_t<type>&& >(source);
}

关于c++ - 为什么在 std::move 中使用 std::remove_reference ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63743687/

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