C++ правила написания указателей

Знаю, что указатель можно указывать как перед переменой, так и после типа данных:

Пример

int* ptr;
int *ptr;

Какой вариант будет лучше использовать?


Ответы (2 шт):

Автор решения: Stanislav Volodarskiy

int* описывает тип переменной. ptr задаёт её имя. Объявление int* ptr; логично отделяет тип от имени.

В строке int* ptr, n; C++ разрешает объявить две переменные. ptr получит тип int*, а n против ожиданий получит тип int, не указатель. Так что некоторые учитывают эту особенность компилятора и пишут int *ptr, n; чтобы подчеркнуть способ, которым компилятор присваивает тип имени.

В итоге:

  1. Следуйте современному стилю:

int* ptr;

  1. Или подчеркните ваше знание компилятора и следуйте историческому стилю:

int *ptr;

В обоих случаях избегайте объявления нескольких имён в одном операторе.

→ Ссылка
Автор решения: Serge3leo

Это часть стиля форматирования, как и связанный с ним стиль объявления ссылок: int& ref;, против int &ref; или int & ref;. Различные стили более менее равноправны, есть только одно обязательное требование: единство стиля в рамках проекта или группы проектов.

Ну, а как-бы, единство стиля, как и многое другое, достигается тестами. Есть несколько инструментов для этого, один из которых: clang-format. Если заглянуть в его список предустановленных стилей:

LLVM:
PointerAlignment: Right
ReferenceAlignment: Pointer
GNU:
PointerAlignment: Right
ReferenceAlignment: Pointer
Google:
PointerAlignment: Left
ReferenceAlignment: Pointer
Chromium:
PointerAlignment: Left
ReferenceAlignment: Pointer
Microsoft:
PointerAlignment: Right
ReferenceAlignment: Pointer
Mozilla:
PointerAlignment: Left
ReferenceAlignment: Pointer
WebKit:
PointerAlignment: Left
ReferenceAlignment: Pointer

Так что, баш на баш. Лично я, дома, пользуюсь:

PointerAlignment: Right
ReferenceAlignment: Left

Мне кажется понятным, отделяя одну сущность от другой, и, главное, радует глаз:

int *p;
int (*pfn)();
int (T::*pmf)();
int& ref;

Но есть и вариант:

DerivePointerAlignment true

Просто, контроль единообразия в проекте, какое бы оно ни было.

→ Ссылка