在C+中正确使用完美转发+;? 我想知道下面是否正确使用C++中的完全转发(下面的解释):
是否首选?任何可以从中构造的在C+中正确使用完美转发+;? 我想知道下面是否正确使用C++中的完全转发(下面的解释):,c++,perfect-forwarding,C++,Perfect Forwarding,是否首选?任何可以从中构造的B,都可以在示例代码中使用一个参数 这不是一件坏事 如果B的构造函数采用int,则可以将int作为第一个参数传递。它不是创建一个临时的B然后将其移动到您的结构中,而是直接从int在您的结构中构造B 如果你真的,真的想要你所描述的,你可以用三种方法来实施它: // copy: A( B const& b,const C& c ) : _b{ b },_c{ c } { } // move: A( B&& b,const C& c
B
,都可以在示例代码中使用一个参数
这不是一件坏事
如果B
的构造函数采用int
,则可以将int
作为第一个参数传递。它不是创建一个临时的B
然后将其移动到您的结构中,而是直接从int
在您的结构中构造B
如果你真的,真的想要你所描述的,你可以用三种方法来实施它:
// copy:
A( B const& b,const C& c ) : _b{ b },_c{ c } { }
// move:
A( B&& b,const C& c ) : _b{ std::move( b ) },_c{ c } { }
或
这就是成语“如果你想要速度,就按值传递”
在这里,从参数到
B
的隐式转换也被阻止,除非调用方显式转换。是的,这是正确的。如果不喜欢,请定义两个构造函数。
A( B& b,const C& c ) : _b{ b },_c{ c } { }
A( B&& b,const C& c ) : _b{ std::move( b ) },_c{ c } { }
// copy:
A( B const& b,const C& c ) : _b{ b },_c{ c } { }
// move:
A( B&& b,const C& c ) : _b{ std::move( b ) },_c{ c } { }
template <typename T, typename=std::enable_if<
std::is_same<
typename std::decay<T>::type,
B
>::value
>::type> A( T&& b,const C& c ) : _b{ std::forward<T>( b ) },_c{ c } { }
A( B b, const C& c ): _b(std::move(b)), _c(std::move(c)) {}