Строковый литерал строковой строки имеет следующее определение:
Также указываются обычные строковые литералы и строковые литералы UTF-8 как узкие строковые литералы. Узкий строковый литерал имеет тип "массив" of n const char ", где n - размер строки, как определено ниже, и имеет статическую продолжительность хранения (3.7).
Я предполагаю, что он имеет статическую продолжительность хранения и что они, как правило, помещаются в ПЗУ, это действительно не имеет большого значения, если есть болтливая ссылка на него. Следующий код выдает предупреждение
const char* const & foo()
{
return "Hello";
}
// warning: returning reference to temporary [-Wreturn-local-addr]
Но это прекрасно, даже без статического ключевого слова
const char* const & foo()
{
const char* const & s = "Hello";
return s;
}
Так в чем же разница между этими двумя?