Эта вещь была частично затронута в другом вопросе о SO, но несколько небрежно, поскольку это был не главный вопрос. Поскольку мое замешательство все еще сохраняется, я ставил его в отдельный вопрос.Почему {typedef int * PTR; const PTR p = #} не эквивалентен «const int * p = & num», а «int * const p = & num»?
Почему следующие два утверждения эквивалентны int* const p=&num
, а не const int* p=&num
, когда последнее кажется более логичным и интуитивно понятным? Каковы строгие причины такого поведения typedef
?
typedef int* PTR;
const PTR p=#
И, наконец, в этом вопросе один член отмечает, что это плохая практика, чтобы использовать typedef
ред указатели. Но я видел, что он широко используется во многих книгах и на веб-сайтах, и это кажется удобной задачей. Это делает код более понятным. Итак, каково окончательное слово? Следует ли как можно больше избегать typedef
указателей?
Edit: А что будет правильный синтаксисом для этого typedef
заявления, если мы хотим следующее:
const int* const p=#
Edit: я нечаянно забыл спросить важную вещь. Каков правильный синтаксис с использованием инструкции typedef
для следующего?
const int* p=# //instead of the int* const p=&num that we got
Я забыл добавить 2 важных момента. Я добавил их как ** Редактирование **. Можете ли вы любезно изучить их? –
Одной из причин появления typedefs типов указателей является то, что вы используете их как непрозрачные объекты вне API. Итак, 'struct foo_magic_structure; typdef my_magic_structure * foo_handle; ', а затем ваш API ссылается на' foo_handle' всюду. Конечно, это относится гораздо больше к C, чем к C++. –