【发布时间】:2020-12-23 21:00:12
【问题描述】:
我尝试实现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 在这种情况下无用的示例 + 子问题。
【问题讨论】:
-
这对您的问题没有影响,但您可能希望使用
static_cast而不是 c 样式转换(因为这可能会退回到reinterpret_cast)。 -
@SimonKraemer 它没有回答我的问题,我要求一个我的实现失败的例子,还有另一个问题“std::remove_reference 是否仅用于避免重载 std::移动 ?”。正如我在底部所说的那样。
-
@linternetsansfil 为什么会失败?它可能只是一种替代实现。但不符合标准。
-
@SimonKraemer 同样,回答问题而不是删除它会更快地解决每个人的问题。
-
@DanielLangr 我不知道为什么会失败,STL使用
std::remove_reference所以应该是有用的。
标签: c++ syntax reference move-semantics