Возможные дубликаты:
Синтаксис синтаксиса С++
С++: В чем разница между функцией (myVar) и (функцией) myVar?
В чем разница между (типом) и типом (значением)?
b = (int) a; // c-like cast notation b = int (a); // functional notation
Возможные дубликаты:
Синтаксис синтаксиса С++
С++: В чем разница между функцией (myVar) и (функцией) myVar?
В чем разница между (типом) и типом (значением)?
b = (int) a; // c-like cast notation b = int (a); // functional notation
По-видимому, я ошибся в своем первоначальном разрезе на ответ. Они примерно эквивалентны. И хотя составные имена типов, такие как 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. Основываясь на моих исследованиях по этому вопросу, я собираюсь также прекратить использовать функции-стили для чего-либо. Вопрос "стили синтаксиса синтаксиса С++ имеет отличный ответ (принятый), который детализирует почему.
Вряд ли какая-то разница. Официально первый сообщает компилятору, что это значение является целым числом. Вероятно, это не создает никакого дополнительного кода. Вызов функции - это фактический вызов, который внутренне выполняет другой тип. Интеллектуальный компилятор оптимизирует это, так что они на самом деле одинаковы.
Нет никакой разницы. Это вопрос предпочтения. Это старомодные приведения
Это зависит от того, где вы его используете и как. Т.е. если у вас есть значения или указатели (или указатели указателей).
С С++ вы должны читать * _cast < > и использовать их вместо этого.