Większość czasu widzę stałej c-strings zdefiniowane jako:Prawidłowy sposób definiowania stałego ciągu C w C++?
static char const* MY_CONSTANT = "Hello World";
Jednak sama wskaźnik nie jest const
. Czy nie byłoby lepiej zrobić to jak poniżej?
static char const* const MY_CONSTANT = "Hello World";
Istnieją 2 bramek ze stałych globalnych, takich jak ten, myślę:
- Nie dopuszczać modyfikacja łańcucha
- Nie dopuszczać zmienna zwrócić do niczego innego
Po prostu założyłem, że te 2 cele były potrzebne przy definiowaniu stałych ciągów.
Inną ciekawą rzeczą jest to, że mam do tego prawo:
int main()
{
auto MY_CONSTANT = "";
MY_CONSTANT = "Another String";
}
Ten mówi mi, że auto
dedukuje ciąg jako char const*
i nie char const* const
.
Mam więc dwa główne pytania:
- Co jest najwłaściwszym sposobem definiowania stałych ciągów stylu C (przypuszczam stale wskaźniki do czegoś, jest bardziej ogólne pytanie?). Dlaczego wybierasz jeden lub drugi?
- Jeśli chodzi o mój przykład z
auto
, to ma sens, dlaczego wybierachar const*
(ponieważ jest to tablica danych, która jest stała, a nie sam wskaźnik). Czy mogę dokonaćauto
wywnioskować nachar const* const
lub czy mogę zmienić kod, aby uzyskać taki typ?
Nie znaczy 'const char * const'? – Adam
@Adam Oba formularze są poprawne C++. Twój robi to samo co moje. –
Domyślnie "auto" wykrywa minimalne ograniczenie, co oznacza, że fakt, że zmienna nie może być ponownie przypisana, jest tylko twoim wyborem. możesz zrobić "auto const", jak sądzę, jeśli chcesz, ale najlepiej nie narzucać go wszystkim. –