У меня есть следующий код
std::vector<std::string> lines;
std::string currentLine;
while(std::getline(std::cin, currentLine)) {
// // option 1
// lines.push_back(std::move(currentLine));
// // option 2
// lines.push_back(currentLine);
}
Я вижу разные затраты для двух
-
Первый подход очистит
currentLine
, что сделаетgetline
выделение нового буфера для строки. Но вместо этого он будет использовать буфер для вектора. -
Второй подход сделает
getline
возможным повторное использование буфера и потребует нового распределения буфера для строки в векторе.
В таких ситуациях есть ли "лучший" способ? Может ли компилятор более эффективно оптимизировать тот или иной подход? Или существуют умные реализации строк, которые делают один вариант более реалистичным, чем другой?