Ответ 1
Игнорируя на данный момент вопрос о том, является ли это хорошей идеей (но это не так), он может поставить вопрос о том, действительно ли это разрешено.
Стандарт С++ определяет все соответствующие заголовки и функции - <cstdio>
рассматривается в § 27.9.2. Если вы действительно хотели его использовать, <stdio.h>
является даже частью стандарта С++ (§D.5), хотя он официально устарел.
Это будет означать, что это разрешено. Формулировка по стандарту C (§7.19.1/2):
FILE
который является типом объекта, способным записывать всю информацию, необходимую для управления поток, включая индикатор положения файла, указатель на связанный с ним буфер (если есть), индикатор ошибки, который записывает, произошла ли ошибка чтения/записи, и конец файла индикатор, который регистрирует, достигнут ли конец файла;
Вопрос заключается в том, действительно ли требуется FILE
представлять этот тип напрямую или может (например) быть typedef
d до void
, поэтому (например) fopen
фактически возвращает a void *
. Внутренности библиотеки, которые ее используют, будут отличать ее до нужного типа, но для внешнего мира (т.е. Вашей программы) она полностью непрозрачна. В частности, если это void *
, вы не можете разыменовать его, даже не просто получить ссылку вместо указателя.
Я бы предположил, что в основном теоретический. В общем, я думаю, что FILE
- это уникальный тип, на котором вы можете выполнять перегрузку, достаточно безопасен. Вы не должны предполагать что-либо о внутренних компонентах того, на что оно указывает, но вы достаточно безопасны, полагая, что можете разыменовать его, чтобы получить ссылку вместо указателя (и достаточно безопасно, полагая, что перегрузка будет отличаться от перегрузок на других типах такие как целые числа).