другая функция и туда передаётся строка, она будет создаваться каждый раз? Вот так "stroka"
Это смотря как строка передается в функцию.
foo() { bar("stroka"); ...`
Как выглядит прототип у bar?
void bar(const string&)
Постоянно, но может повезет с SSO и аллокаций не будет
А компилятор разве не может в ридонли секции одну такую строку сделать?
Может если бы принимал const char*
он так и сделает скорее всего, но ты её передаёшь в std::string, который владеет строкой
И тогда будет выделяться память? Не там где литерал, а там где параметр?
да, он себе куда-то скопирует эту строку, либо в SSO буфер (если повезёт), либо у алокатора попросит память, и туда скопирует
То есть если строка маленькая, то будет браться только этот единственный экземпляр из ридонли секции без копий и аллокаций?
нет, ещё раз, std::string владеет строкой, поэтому он всегда её копирует себе
Обсуждают сегодня