Die meiste Zeit sehe ich konstant C-Strings wie folgt definiert:Korrekter Weg, um eine konstante C-Zeichenfolge in C++ zu definieren?
static char const* MY_CONSTANT = "Hello World";
jedoch der Zeiger selbst ist nicht const
. Wäre es nicht angemessener, es wie unten zu tun?
static char const* const MY_CONSTANT = "Hello World";
Es gibt zwei Ziele mit konstanten Globals wie diese, denke ich:
- nicht zulassen Änderung der Zeichenfolge
- Sie die Variable auf etwas anderen
Ich nahm einfach an, dass diese 2 Ziele bei der Definition konstanter Strings benötigt wurden.
Eine weitere interessante Sache ist, dass ich dies zu tun bin erlaubt:
int main()
{
auto MY_CONSTANT = "";
MY_CONSTANT = "Another String";
}
Das sagt mir, dass auto
die Zeichenfolge als char const*
und nicht char const* const
folgert. Ich habe zwei Hauptfragen
So:
- Was die am besten geeignete Art und Weise konstant c-Strings zu definieren (ich nehme an konstante Zeiger zu etwas, ist die allgemeinere Frage?). Warum wählst du das eine oder das andere aus?
- In Bezug auf mein Beispiel mit
auto
macht es Sinn, warum wähltchar const*
(weil es das Array von Daten ist, die konstant ist, nicht der Zeiger selbst). Könnte ichauto
aufchar const* const
ableiten oder kann ich den Code ändern, um einen solchen Typ zu ergeben?
Meinen Sie nicht 'const char * const'? – Adam
@Adam Beide Formen sind gültig C++. Dein tut das gleiche wie meins. –
Der Standardwert, den 'auto' erkennt, ist die minimale Einschränkung, was bedeutet, dass die Tatsache, dass die Variable nicht neu zugewiesen werden kann, nur Ihre Entscheidung ist. du kannst 'auto const' machen, nehme ich an, wenn du willst, aber es ist am besten, es nicht jedem aufzudrängen. –