Я знаю, что строковые литералы в C/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 prefix("Value: ");
, который инициализируется в каком-то константах заголовка файла.
Кроме того, конкатенация здесь возвращает временный (назовем его Value: 42
и константную ссылку на это временное настоящее время передается функции set_text()
, я правильно в этом?
Еще раз спасибо!
Что твоя магия 8 шар сказать? – 2010-12-05 22:59:41
Если вы хотите минимизировать потребление памяти во время выполнения, как насчет изменения set_label для принятия const char * и использовать char * вместо строки? – user347594 2010-12-05 23:02:14
@ user347594: Я не могу изменить `set_label`, к сожалению, – 2010-12-05 23:07:32