Язык программирования C++ для профессионалов


Преобразование типа - часть 2


int i = 1; char* pc = "asdf"; int* pi = &i; i = (int)pc; pc = (char*)i; // осторожно: значение pc может измениться. // На некоторых машинах sizeof(int) // меньше, чем sizeof(char*) pi = (int*)pc; pc = (char*)pi; // осторожно: pc может измениться // На некоторых машинах char* имеет не такое // представление, как int*

Для многих машин эти присваивания ничем не грозят, но для некоторых результат может быть плачевным. В лучшем случае подобная программа будет переносимой. Обычно без особого риска можно предположить, что указатели на различные структуры имеют одинаковое представление. Далее, произвольный указатель можно присвоить (без явного преобразования типа) указателю типа void*, а void* может быть явно преобразован обратно в указатель произвольного типа.

В языке С++ явные преобразования типа оказывается излишними во многих случаях, когда в С (и других языках) они требуются. Во многих программах можно вообще обойтись без явных преобразований типа, а во многих других они могут быть локализованы в нескольких подпрограммах.




Начало  Назад  Вперед



Книжный магазин