Избегайте ненужного копирования в тернарном оператореC++

Программы на C++. Форум разработчиков
Anonymous
 Избегайте ненужного копирования в тернарном операторе

Сообщение Anonymous »

Насколько я понимаю, тип, который оценивает тернарный оператор в следующей функции, — это std::string, т. е. это значение, а не ссылка.
Это есть ли способ избежать копирования строки при оценке первой ветки?

Код: Выделить всё

bool f(const std::vector& vec, const std::string& s) {
const std::string& s2 = !s.empty() && s[0] == '{' ? s : '{' + s + '}';
for (const std::string& v : vec) {
if (v == s2)
return true;
}
return false;
}
РЕДАКТИРОВАТЬ:
Похоже, я слишком конкретно сформулировал вопрос. Я хотел, чтобы код со строками был просто примером. Вопрос, который я имел в виду, более общий. Если вам нужна потенциально дорогостоящая модификация большого объекта, но при выполнении условия вы можете использовать объект как есть, есть ли способ привязать исходный объект или результат вычисления к ссылке, не копируя исходный объект, если вычисление не требуется?

Подробнее здесь: https://stackoverflow.com/questions/790 ... y-operator

Вернуться в «C++»