Большую часть времени я вижу постоянные 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 (я полагаю, постоянные указатели на что-то, это более общий вопрос?). Почему вы выбираете то или иное?
- Что касается моего примера с
auto
, понятно, почему он выбираетchar const*
(потому что это массив данных, который является константой, а не сам указатель). Могу ли я заставитьauto
вывестиchar const* const
или изменить код, чтобы он приводил к такому типу?
const char* const
? - person Adam   schedule 30.09.2014auto
, является минимальным ограничением, а это означает, что тот факт, что переменная не может быть переназначена, является только вашим выбором. вы можете сделатьauto const
я полагаю, если хотите, но лучше не навязывать это всем. - person v.oddou   schedule 30.09.2014const char *
; хотите ли вы, чтобы строковая переменная была постоянной, зависит от вас. Вы задаете тот же вопрос, что иshould I use const int i=0 or int i=0
- person texasbruce   schedule 30.09.2014const
! - person M.M   schedule 30.09.2014char const s[] = "Hello, World!";
. (В C++ ключевое словоstatic
является избыточным, потому что пространство именconst
по умолчанию является статическим, хотя в любом случае практично использовать его на случай, если кто-то перенесет ваш заголовок на C и не осознает этого). - person M.M   schedule 30.09.2014static char const* MY_CONSTANT = "Hello World";
, ниstatic char const* const MY_CONSTANT = "Hello World";
не являются более правильными, чем другие. Они означают разные вещи. Используйте тот, который больше подходит для ваших текущих потребностей. - person Keith Thompson   schedule 30.09.2014