【发布时间】:2018-05-30 04:15:12
【问题描述】:
找朋友:
为什么下面代码中的std::forward 将参数c 强制转换为右值?
template <typename T>
void f (T& c) {
using value_type = typename std::remove_reference_t<T>;
std::vector<value_type> v;
// debugger reveals: push_back( T&& value ) is called here
v.push_back(std::forward<T>(c));
}
请注意,c 在此处不是通用/转发引用。我知道这个功能如果真的有用的话很可能会更有用,但还是很好奇。
【问题讨论】:
-
"请注意,这里的 c 不是通用/转发引用。" 那么为什么你使用
std::forward? -
我不小心遗漏了一个 & 号,只是想知道为什么 std::forward 会像这里那样表现。
标签: c++ c++11 move-semantics perfect-forwarding