Ответ 1
По-видимому, я ошибся в своем первоначальном разрезе на ответ. Они примерно эквивалентны. И хотя составные имена типов, такие как long long
или void *
, не могут напрямую использовать функциональный синтаксис (т.е. long long(val)
не работает), использование typedef
может обойти эту проблему.
Оба отличных обозначения очень плохие, их следует избегать. Например:
const char c = 'a';
void *fred = (void *)(&c);
работает, и он не должен.
Изначальная нотация C-стиля иногда ведет себя как static_cast
, иногда вроде const_cast
, иногда вроде reinterpret_cast
, или даже комбинация из двух в зависимости от конкретной ситуации, в которой она использовалась. Эти семантики довольно сложны, и не всегда легко точно сказать, что происходит в любой ситуации.
Я перешел к использованию в основном стилей стиля С++ static_cast<type>(val)
и никогда не использовал приведения в стиле C. Основываясь на моих исследованиях по этому вопросу, я собираюсь также прекратить использовать функции-стили для чего-либо. Вопрос "стили синтаксиса синтаксиса С++ имеет отличный ответ (принятый), который детализирует почему.