Я знаю, что строковые литералы в C / C ++ имеют статическую длительность хранения , что означает, что они живут "вечно", т. Е. До тех пор, пока работает программа.
Таким образом, если у меня естьфункция, которая вызывается очень часто и использует строковый литерал, например:
void foo(int val)
{
std::stringstream s;
s << val;
lbl->set_label("Value: " + s.str());
}
, где функция set_label принимает const std::string&
в качестве параметра.
Должен ли я использовать const std::string
здесь вместо строкового литерала или это ничего не изменит?
Мне нужно минимизировать как можно больше потребления памяти во время выполнения.
edit:
Я хотелсравните строковый литерал с const std::string prefix("Value: ");
, который инициализируется в каком-то файле заголовка константы.
Кроме того, здесь конкатенация возвращает временный объект (давайте назовем его Value: 42
, и постоянная ссылка на этот временный объект передается функции set_text()
, я прав в этом?
Спасибо еще раз!