相关疑难解决方法(0)

使用前进的优点

在完美转发中,std::forward用于转换命名的右值引用t1t2未命名的右值引用.这样做的目的是什么?inner如果我们离开t1&t2作为左值,那将如何影响被调用的函数?

template <typename T1, typename T2>
void outer(T1&& t1, T2&& t2) 
{
    inner(std::forward<T1>(t1), std::forward<T2>(t2));
}
Run Code Online (Sandbox Code Playgroud)

c++ c++-faq rvalue-reference perfect-forwarding c++11

411
推荐指数
6
解决办法
6万
查看次数

什么样的问题不转发普遍参考?

据我所知,在C++ 11中,应始终使用通用引用std::forward,但我不确定如果std::forward不使用会出现什么样的问题.

template <T>
void f(T&& x);
{
    // What if x is used without std::forward<T>(x) ?
}
Run Code Online (Sandbox Code Playgroud)

你能否举例说明在这种情况下可能出现的问题?

c++ perfect-forwarding c++11 universal-reference

10
推荐指数
3
解决办法
364
查看次数

移动语义并完善转发差异

我已经从这个问题得到了什么样的移动语义: 什么是移动语义?

但是我仍然没有得到与移动语义相关的完美转发.

有人可以用简单的英语和一个简单的例子解释完美的转发意味着什么?

c++ move-semantics perfect-forwarding c++11

9
推荐指数
1
解决办法
2267
查看次数

当使用模板支持functor作为参数时,我应该使用什么限定符?

考虑以下代码:

template<class F>
void foo1(F f) { f(); }

template<class F>
void foo2(F const& f) { f(); }

template<class F>
void foo3(F&& f) { f(); }
Run Code Online (Sandbox Code Playgroud)

foo我应该使用哪个版本?foo1这是我在"野外"看到的最多,但我担心它可能会引入我不想要的副本.我有一个很复杂的自定义仿函数,所以我想避免这种情况.目前我倾向于foo3(因为foo2不允许变异的算子),但我不确定其含义.

我的目标是C++ 11.

c++ templates functor function-object c++11

7
推荐指数
1
解决办法
210
查看次数