Да, это так. Но это имхо плохой стиль. Не прямое объявление структуры, а прямое объявление типа указателя. Это запутывание, информация о том, что данная переменная или параметр является указателем (и в меньшей степени для массивов), чрезвычайно важна, когда вы хотите прочитать код.
При просмотре кода на первый взгляд часто трудно понять, какая функция может иметь побочный эффект или нет. Если используемые типы скрывают эту информацию, это добавляет читателю бремя запоминания.
int do_fancy(vector a, vector b);
или
int do_fancy(vector *a, vector *b);
В первом случае я могу легко упустить, что эта функция может изменить содержание a или b. Во втором я предупрежден.
И когда я на самом деле пишу код, я также знаю, что нужно написать a->x
, и компилятор не скажет мне error: request for member
x 'в чем-то, что не является структурой или объединением`.
Я знаю, это похоже на личный вкус, но, поработав с большим количеством внешнего кода, я могу заверить вас, что это очень раздражает, когда вы не распознаете уровень косвенности переменных. Это одна из причин, почему я также не люблю ссылки на C ++
(в Java это не потому, что все объекты передаются по ссылке, это непротиворечиво) и в типе LPCSTR
Microsoft.