LINUX.ORG.RU

[C++] Incompatible type conversion

 


0

1

Всех приветствую. в C удобно когда указатель void* неявно преобразуется к не void* указателю в C++ приходится писать явный каст Что бы такого поломалось в системе типов C++ если бы было разрешено неявное преобразование void* в нужный тип как в C ?


> Что бы такого поломалось в системе типов C++ если бы было разрешено неявное преобразование void* в нужный тип как в C ?

много чего поломалось бы. например:

void dump_array(const int *array, int length);
void dump_array(const double *array, int length);

dump_array(voidPtr, n);

arsi ★★★★★
()
Ответ на: комментарий от arsi

верно ...а если бы просто выдавать ошибку когда существует неоднозначность ? основная масса приведений из void* к нужному типу не касается неоднозначности насколько я мог заметить намного чаще однозначное приведение которое надо делать явно

osox
() автор топика
Ответ на: комментарий от osox

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

AIv ★★★★★
()

> в C удобно когда указатель void* неявно преобразуется к не void* указателю в C++ приходится писать явный каст

В С++ явное преобразование типов в большинстве случаев свидетельствует о проблемах в голове программиста. Потребность в void* в этом языке очень-очень мала, скорее всего можно придумать лучшее решение задачи на базе шаблонов, перегрузки, виртуальных функций и т.п.

anonymous
()
Ответ на: комментарий от gear

> с каких пор переопределение методов стало граблями?

я имел в виду неявно преобразование - грабли

namezys ★★★★
()

> Что бы такого поломалось в системе типов C++ если бы было разрешено неявное преобразование void* в нужный тип как в C

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

anonymous
()

Если тебе это удобно, значит, ты этим часто пользуешься, значит, у тебя много указателей на void, значит, твой код - говно.

Miguel ★★★★★
()

в C удобно когда указатель void* неявно преобразуется к не void* указателю

по-моему, gcc warning выдаёт. И правильно делает

true_admin ★★★★★
()

> в C удобно когда указатель void* неявно преобразуется к не void* указателю

Для подобных «программеров» есть только один совет: разогнаться - и об стену.

Led ★★★☆☆
()
Ответ на: комментарий от anonymous

И давно у вас gcc на это warning выдает?

Я ошибся. Молчит, скотина.

true_admin ★★★★★
()

> в C удобно когда указатель void* неявно преобразуется к не void* указателю
О да, ничего удобнее я не видел.

PayableOnDeath
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.