【发布时间】:2014-10-13 17:47:13
【问题描述】:
我正在尝试做一些事情
template <typename T>
void somemethod (T&& t) {
foo(static_cast<const T&>(t));
bar(std::forward<T>(t));
}
这样
如果
foo()对t进行了更改,它将改为对副本进行操作。 (类似于写时复制)一旦
foo()使用t完成,t将直接转发到bar()
这可能吗?写的对吗?编译器会理解我想要做什么吗?
我需要创建一些帮助类来实现它吗?
同样,如果我尝试的结果是:
template <typename T>
void somemethod (T&& t) {
foo(std::forward<T>(t));
bar(std::forward<T>(t));
}
这样
-
foo()使用的相同t然后被转发到bar()
【问题讨论】:
-
“我很确定这意味着写时复制” 好吧,不是真正的免费功能,你会失去 copy在这种情况下,除非您提供一些允许访问此副本的返回值。