Ответ 1
Является ли второй альтернативный безопасным и переносимым в этом сценарии?
Да! Распределение строк в строковых литералах static, и они сохраняются для срока службы приложения.
Мне нужна функция для возврата строки, доступ к которой будет доступна только для чтения. Содержимое строки известно во время компиляции, так что я все равно буду использовать строковый литерал.
Я могу вернуть что-то вроде std::string
:
std::string myFunction()
{
return "string";
}
или return const char*
:
const char* myFunction()
{
return "string";
}
Является ли второй альтернативный безопасным и переносимым в этом сценарии?
Является ли второй альтернативный безопасным и переносимым в этом сценарии?
Да! Распределение строк в строковых литералах static, и они сохраняются для срока службы приложения.
Да! Но остерегайтесь этой потенциальной возможности:
char * myFunc() {
return "Constant string?";
}
Да, вы можете преобразовать строковый литерал в неконстантный char *
! Это позволит вам позже нарушить мир, пытаясь изменить содержимое этого char *
. Эта "функция" существует по устаревшим причинам - строковые литералы старше const и первоначально были определены как char *
в C.
g++ выдает неприятное предупреждение, даже в режиме по умолчанию. Я не знаю, как VС++ выдает предупреждение так же охотно.
Да. (Нельзя хранить такой указатель в глобальной структуре данных).