В большинстве случаев я вижу постоянные C-строки, определенные как:
static char const* MY_CONSTANT = "Hello World";
Однако сам указатель не const
. Не было бы более уместным сделать это, как показано ниже?
static char const* const MY_CONSTANT = "Hello World";
Есть два гола с постоянными глобальными подобными, я думаю:
- Не разрешать модификацию строки
- Не позволяйте переменной указывать на что-либо еще
Я просто предположил, что эти 2 цели необходимы при определении постоянных строк.
Еще одна интересная вещь: мне разрешено сделать это:
int main()
{
auto MY_CONSTANT = "";
MY_CONSTANT = "Another String";
}
Это говорит мне, что auto
выводит строку как char const*
, а не char const* const
.
Итак, у меня есть два основных вопроса:
- Что является наиболее подходящим способом определения константных строк c-style (я полагаю, что постоянный указатель на что-то, является более общим вопросом?). Почему вы выбираете тот или другой?
- Что касается моего примера с
auto
, имеет смысл, почему он выбираетchar const*
(потому что это массив данных, который является константой, а не самим указателем). Могу ли я сделать выводauto
наchar const* const
или изменить код, чтобы он привел к такому типу?