Каков эффект приведения целочисленного ссылочного значения к (const char*) и в чем разница между приведением к char * и приведением к const char * в C++?
Я читаю некоторые коды, где иногда происходит преобразование целочисленного ссылочного значения в const char *, используемое с ostream.
uint32_t val;// initialized by some value
void a(ostream& os) const{
os.write((const char*)&val, sizeof(val));
}
1) Как влияет приведение целочисленного ссылочного типа на (const char *)??
2) и можно ли использовать (char *) и val так же, как использовать (const char *)??
2 *) Если нет, то какая разница??
1 ответ
char *
а также const char *
разные типы. char *
это указатель на символ и const char *
указатель на символ, который нельзя изменить с помощью указателя
В вашем примере (const char*)&val
возьму адрес val
и обрабатывать это как указатель на символ, данные которого нельзя изменить. Это гарантирует, что write
функция не изменяет данные (а просто записывает их в другое место). Переходя (char*)&val
как параметр не гарантирует этого. write
может затем перезаписать ваш val
,