regularny ciąg ciąg dosłowne ma następującą definicję:Dlaczego zwracanie odwołania do literału ciągu jest odwołaniem do tymczasowego?
Ordinary literały ciągów znaków i UTF-8 literały ciągów znaków są również określane jako wąskich napisowych. Wąskie wyrażenie literowe ma typ "array n const char", gdzie n jest rozmiarem łańcucha zdefiniowanego poniżej, i ma statyczny czas przechowywania (3.7).
Jestem zakładając, ponieważ ma statyczny czas przechowywania i że są one zwykle umieszczane w pamięci ROM, to naprawdę nie jest wielka sprawa, czy istnieje zwisające odniesienie do niej. Poniższy kod emituje ostrzeżenie
const char* const & foo()
{
return "Hello";
}
// warning: returning reference to temporary [-Wreturn-local-addr]
Ale to jest w porządku, nawet bez słowa kluczowego static
const char* const & foo()
{
const char* const & s = "Hello";
return s;
}
Więc jaka jest różnica między nimi?
Twój kod nie zwraca referencji do literału. Zwraca referencję do wskaźnika. Większość tego, co cytujesz, jest nieistotna dla kodu. –
Skąd pochodzi twój cytat? Powinieneś go dodać. – dhein
Dlaczego zwracasz odwołanie do wskaźnika-znaku zamiast samego wskaźnika-znaku? – CodesInChaos