C++ 我应该使用转发引用吗?
C++ should I use forwarding references?
我有一些函数可以获取值并将它们传递给其他函数。链下的任何人都不会关心它是否是右值引用,他们只想读取值。我需要使用转发引用还是可以像这样使用 const&
?
template<class Arg>
void printOne(std::string& str, std::string_view fmt, const Arg& arg) {
if constexpr (std::is_same<char, Arg>::value) {
// ...
} else if constexpr (...) {
// ...
}
}
template<class ...Args>
std::string printFormatted(std::string_view fmt, const Args& ...args) {
std::string str;
(printOne(str, fmt, args), ...);
return str;
}
不,您不必使用转发引用。 const
引用绑定到临时右值,所以一般来说,当不需要移动语义或完美转发时,普通的、普通的 const
引用就可以工作。
我有一些函数可以获取值并将它们传递给其他函数。链下的任何人都不会关心它是否是右值引用,他们只想读取值。我需要使用转发引用还是可以像这样使用 const&
?
template<class Arg>
void printOne(std::string& str, std::string_view fmt, const Arg& arg) {
if constexpr (std::is_same<char, Arg>::value) {
// ...
} else if constexpr (...) {
// ...
}
}
template<class ...Args>
std::string printFormatted(std::string_view fmt, const Args& ...args) {
std::string str;
(printOne(str, fmt, args), ...);
return str;
}
不,您不必使用转发引用。 const
引用绑定到临时右值,所以一般来说,当不需要移动语义或完美转发时,普通的、普通的 const
引用就可以工作。