2017-02-22 62 views
0

Я читаю несколько кодов, где иногда выполняется отличное ссылочное значение для const char *, используемое с ostream.Каков эффект отбрасывания целочисленного ссылочного значения (const char *) и какова разница между приведением в char * и приведением к const char * в C++?

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 *) Если нет, какая разница?

+0

Давайте перейдем к более простым частям. 1. В чем разница между 'const char *' и 'char *'? 2. Что делает кастинг? Выберите один вопрос (или оба) и спросите. –

+0

'& val' - указатель на целое число; не целочисленная ссылка. –

ответ

1

char * и const char * - это разные типы. char * является указателем на char и const char * является указателем на символ, который нельзя изменить с помощью указателя.

В вашем примере (const char*)&val будет принимать адрес val и рассматривать это как указатель на символ, данные которого не могут быть изменены. Он гарантирует, что функция write не изменяет данные (но просто записывает их в другое место). Передача (char*)&val в качестве параметра не гарантирует этого. write может перезаписать val.

+0

Спасибо @Martin. но я признаю, что это не то, что я хочу знать. Я отредактировал название и уточнил вопросы больше. – mallea