Здравствуйте, Submitter, Вы писали:
S>Везде и так, и так. Как правильно?
Это всего лишь вопрос стиля кодирования. С точки зрения синтаксиса, эти варианты равнозначны.
О чем важно помнить, что, например в таком варианте:
char* a, b;
объявляются указатель и символьная переменная, а не два указателя, как это может показаться на первый взгляд. С этой точки зрения второй вариант более интуитивно понятен:
Здравствуйте, Submitter, Вы писали:
S>Везде и так, и так. Как правильно?
В Си более каноничный вариант
char *a
потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'. Видимо, это ломает неокрепшие умы ещё больше чем само понятие "указателей", поэтому многим проще представлять указатели как отдельный тип и потому писать "char*".
Теоретически в С++ так же, но там одни наркоманы, поэтому в проектах на С++ в 99.9% соглашение о кодировании — приписывать оператор к имени типа, а не переменной.
Что интересно: те, кто радеют за "char*" мало задумаваются, что указатель на функцию объявляется как
type (*name)(type1, type2, ...)
и при всём желании звёздочку не припишешь к имени типа.
Здравствуйте, mbait, Вы писали:
M>В Си более каноничный вариант M>
M>char *a
M>
M>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'. Видимо, это ломает неокрепшие умы ещё больше чем само понятие "указателей", поэтому многим проще представлять указатели как отдельный тип и потому писать "char*".
Что-то смутно вспоминается, что об этом говорилось с первых страниц книжки по С. Не путаю?
Здравствуйте, Mihas, Вы писали:
M>Что-то смутно вспоминается, что об этом говорилось с первых страниц книжки по С. Не путаю?
Книг по Си очень много, о какой идёт речь? Но в любом случае, я прочитал об этом не в книге, мне такой подход показался наиболее логичным, и я решил поделиться. Вообще, сам спор не имеет смысла, потому что есть конструкции вида
Здравствуйте, mbait, Вы писали:
R>>Что-то ты перемудрил здесь. Такая конструкция не является синтаксически допустимой и не скомпилируется.
M>Хотел написать M>
M>const int * const * a
M>
Интересно, как ты применишь здесь сформулированный тобой принцип:
потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.
R>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.
Никак. Почитай всю цепочку внимательнее. Сначало я говорю про простой случай, описанный ТС, а потом уточняю, что есть случаи, когда никакая логика не применима. Но раз уж ты спросил, то можно попробовать читать задом наперёд: 'a' can be de-referenced (read-only) to something that can be de-referenced (read-only) to int. "Звёзды" в таком случае я предпочитаю оставлять отдельно от остальных слов.
Нравится из таких соображений: когда бегло посматриваешь исходник и в нем надо найти объвление переменной — проще зацепиться взглядом, если имя переменной представлено в виде отдельного слова "в чистом виде", без символов-засорителей.
А звездочка после названия типа уже ничему не мешает — ибо при таком беглом полуподсознательном поиске тип переменной будет ключом поиска гораздо реже, чем ее имя
Здравствуйте, mbait, Вы писали:
M>Здравствуйте, rg45, Вы писали:
R>>Что-то ты перемудрил здесь. Такая конструкция не является синтаксически допустимой и не скомпилируется.
M>Хотел написать M>
M>const int * const * a
M>
Поэтому чтобы не путаться, надо писать так и читать справа налево: переменная а является указателем на константный указатель на константный int
Здравствуйте, T4r4sB, Вы писали:
TB>Здравствуйте, mbait, Вы писали:
M>>Здравствуйте, Submitter, Вы писали:
S>>>Везде и так, и так. Как правильно?
M>>В Си более каноничный вариант M>>
M>>char *a
M>>
M>>потому что '*' нызвается de-reference operator, а само выражение читается как variable 'a' can be de-referenced to type 'char'.
TB>А char& a читается как "указатель на a имеет тип char"
char& a;
Это уже С++, а там никаких особых идеологий не было, а было "давайте переиспользовать символы необычным способом". И судя по С++1x традиция исправчно чтится. Я бы сделал ссылку через '@' от "alias", например.