Я знаю, что строковые литералы в 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
вместо строкового литерала или это не будет иметь никакого значения?
Мне нужно минимизировать потребление памяти во время выполнения насколько возможно.
редактировать:
Я хотел сравнить строковый литерал с префиксом const std :: string ("Value:");
, который инициализирован в каком-то заголовочном файле констант.
Кроме того, конкатенация здесь возвращает временное значение (назовем его Value: 42
, и постоянная ссылка на этот временный объект передается в функцию set_text ()
, я правильно?
Еще раз спасибо!