C должен ли я использовать ссылки на пересылку?

#c #templates #perfect-forwarding #forwarding-reference

Вопрос:

У меня есть функции, которые принимают значения и передают их другим функциям. Никого в цепочке никогда не будет волновать, является ли это ссылкой на rvalue, и они просто хотят прочитать значение. Нужно ли мне использовать ссылки для пересылки или я могу просто использовать constamp; это?

 templatelt;class Arggt; void printOne(std::stringamp; str, std::string_view fmt, const Argamp; arg) {  if constexpr (std::is_samelt;char, Arggt;::value) {  // ...  } else if constexpr (...) {  // ...  }  }  templatelt;class ...Argsgt; std::string printFormatted(std::string_view fmt, const Argsamp; ...args) {  std::string str;  (printOne(str, fmt, args), ...);  return str; }  

Ответ №1:

Нет, вам не нужно использовать ссылки на пересылку. const ссылки привязываются к временным значениям r, поэтому, как правило, когда не требуется семантика перемещения или идеальная пересылка, будет работать простая const ссылка на садовое разнообразие.