Моему коллеге 0 на 2 по вопросам, которые он вдохновил ( 1 , 2 ), поэтому я решил дать ему шанс наверстать упущенное.
Наше последнее разногласие связано со стилем вопроса о том, где поместить "const" в декларации.
Он считает, что он должен идти либо перед типом, либо после указателя. Причина в том, что это то, что обычно делают все остальные, и другие стили могут вводить в заблуждение. Таким образом, указатель на константу int и константный указатель на int будут соответственно:
const int *i;
int * const i;
Однако я все равно запутался. Мне нужны правила, которые непротиворечивы и просты для понимания, и единственный способ понять смысл слова «const» состоит в том, что он проходит после , то есть изменяет его. Есть исключение, которое позволяет ему идти перед конечным типом, но это исключение, поэтому мне легче, если я его не использую.
Таким образом, указатель на константу int и указатель на int будут соответственно:
int const * i;
int * const i;
В качестве дополнительного преимущества, выполнение таких действий облегчает понимание более глубоких уровней косвенности. Например, указатель на постоянный указатель на int будет ясно:
int * const * i;
Мое утверждение заключается в том, что если кто-то просто научится этому по-своему, у него будет мало проблем с выяснением того, с чем работает вышеприведенное.
В конечном итоге проблема заключается в том, что он считает, что помещать const после int настолько ужасно некрасиво и настолько вредно для читабельности, что его следует запретить в руководстве по стилю. Конечно, я думаю, что если что-нибудь будет в руководстве, предложим сделать это по-своему, но в любом случае нам не следует запрещать один подход.
Edit:
Я получил много хороших ответов, но ни один из них не касался моего последнего абзаца («Основная проблема»). Многие люди настаивают на последовательности, но разве это так желательно в этом случае, что это хорошая идея, чтобы запретить другой способ сделать это, а не просто обескураживать это?