Лучше всего никогда использовать броски в стиле C по трем основным причинам:
- как уже упоминалось, здесь проверка не выполняется. Программист просто не может знать, какое из различных приведений используется, что ослабляет строгую типизацию
- новые броски преднамеренно бросаются в глаза. Поскольку приведения часто выявляют слабые места в коде, утверждается, что хорошо делать приведенные в коде приведения - хорошая вещь.
- это особенно верно при поиске приведений с помощью автоматизированного инструмента. Надежно найти слепки в стиле C почти невозможно.
Как отметил palm3D:
Синтаксис приведения в стиле C ++ слишком многословен.
Это сделано намеренно по причинам, указанным выше.
Синтаксис конструктора (официальное имя: приведение в стиле функции) семантически такой же , что и приведение в стиле C, и его также следует избегать (за исключением инициализации переменных при объявлении) по тем же причинам , Это спорно, должно ли это быть правда, даже для типов, которые определяют пользовательские конструктор, но в эффективном C ++, Мейерс утверждает, что даже в тех случаях, следует воздержаться от их использования. Для иллюстрации:
void f(auto_ptr<int> x);
f(static_cast<auto_ptr<int> >(new int(5))); // GOOD
f(auto_ptr<int>(new int(5)); // BAD
static_cast
здесь фактически вызовет конструктор auto_ptr
.