相关疑难解决方法(0)

完美转发 - 这是什么一回事?

可能重复:
使用forward的优点

有人可以向我解释一下完美的转发是什么意思吗?

terminology perfect-forwarding c++11

49
推荐指数
2
解决办法
4万
查看次数

在模板代码中转发引用与const左值引用

我最近一直在研究C++中的转发引用,下面简要概述了我目前对该概念的理解.

假设我有一个模板函数,foo它将转发引用转换为类型的单个参数T.

template<typename T>
void foo(T&& arg);
Run Code Online (Sandbox Code Playgroud)

如果我用左值调用此函数,那么T将推断为由于参考折叠规则T&使arg参数成为类型.T&T& && -> T&

如果使用未命名的临时函数(例如函数调用的结果)调用此函数,T则将推断为T使arg参数为类型T&&.

foo但是,里面arg是一个命名参数,所以std::forward如果我想将参数传递给其他函数并仍然保持其值类别,我将需要使用.

template<typename T>
void foo(T&& arg)
{
    bar(std::forward<T>(arg));
}
Run Code Online (Sandbox Code Playgroud)

据我所知,cv-qualifiers不受此转发的影响.这意味着如果我使用命名的const变量调用foo,那么T将推断为const T&,因此类型arg也将const T&归因于引用折叠规则.对于const rvalues T将被推导为const T,因此arg将是类型const T&&.

这也意味着如果我修改arg内部的值,foo如果我将一个const变量传递给它,我将得到编译时错误.

现在我的问题.假设我正在编写容器类,并希望提供一种将对象插入容器的方法.

template<typename T>
class Container
{
public: …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11

8
推荐指数
1
解决办法
765
查看次数

标签 统计

c++11 ×2

c++ ×1

perfect-forwarding ×1

templates ×1

terminology ×1