#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
ссылка на садовое разнообразие.