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