考虑简单的代码(免责声明:这是一个noobie问题):
template<typename T> struct foo
{
foo(const T&);
foo(T&& ctorArguement):ptrToSomeType(new someType(std::forward<T&&>(ctorArguement))){}
^^
std::unique_ptr<someType> ptrToSomeType;
}
Run Code Online (Sandbox Code Playgroud)
与此相比:
template<typename T> struct foo
{
foo(const T&);
foo(T&& ctorArguement):ptrToSomeType(new someType(std::forward<T>(ctorArguement))){}
^^
std::unique_ptr<someType> ptrToSomeType;
}
Run Code Online (Sandbox Code Playgroud)
我想我应该使用std :: move但我特别想知道这两个案例.两个版本完全相同,还是一个比另一个更好?
这两个代码片段做同样的事情.第一个投射到T&& &&,这是T&&.第二个投射到T&&.使用std::move会产生同样的效果.
为避免混淆读者的代码(包括您自己),您应该std::move在此上下文中使用.std::forward<T>只有在T从转发引用中推导出来时才会使用它T&&,而在代码中并非如此,因为T它实际上是封闭类的参数,而不是函数.至于std::forward<T&&>它的作用与std::forward<T>后者适用的情况相同,但这一点都不明显,所以它也会使读者感到困惑.
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |