С c ++ вы должны читать * _cast <> и использовать их вместо этого.

жные дубликаты:
Синтаксические стили C ++
C ++: В чем разница между функцией (myVar) и (function) myVar?
В чем разница между значением (типом) и типом (значением)?

b = (int) a;    // c-like cast notation
b = int (a);    // functional notation
 Sebastian Paaske Tørholm23 янв. 2011 г., 20:07

Ответы на вопрос(4)

я ошибся в своем первоначальном сокращении при ответе. Они примерно эквивалентны. И в то время как составные имена типа, какlong long или жеvoid * не может использовать функциональный синтаксис напрямую (т.е.long long(val) не работает), используяtypedef можно обойти эту проблему.

Обе записи очень плохи, и их следует избегать. Например:

const char c = 'a';
void *fred = (void *)(&c);

работает, а не должно.

Обе нотации в стиле C иногда ведут себя какstatic_castиногда нравитсяconst_castиногда нравитсяreinterpret_castили даже их сочетание в зависимости от конкретной ситуации, в которой оно используется. Эта семантика довольно сложна, и не всегда легко точно сказать, что происходит в той или иной ситуации.

Я пошел на использование в основном C ++static_cast<type>(val) бросает стиль и никогда не использует броски в стиле С. Основываясь на своих исследованиях по этому вопросу, я собираюсь также прекратить использовать приведения в стиле функций для чего-либо. Вопрос "Синтаксические стили C ++"имеет отличный ответ (принятый), который подробно объясняет, почему.

 CB Bailey23 янв. 2011 г., 20:19
Это совершенно неверно.class A { operator int() const; }; int test( A a ) { return int(a); } работает отлично, хотяint не имеет конструктора Приведение стиля функции с одним параметром имеет тот же эффект, что и эквивалентное приведение стиля C.
 Benjamin Lindley23 янв. 2011 г., 20:24
Функциональный стиль с указателями:typedef void * voidp; voidp fred = voidp(&c);
 Omnifarious23 янв. 2011 г., 20:31
@PigBen - О, ты прав.вздох Исправил мой ответ еще раз. Я ненавижу, когда люди используют typedef, чтобы скрыть тот факт, что тип является указателем. :-(
 Omnifarious23 янв. 2011 г., 20:21
@Charles Bailey - я прочитал больше и узнал, что был неправ. :-) Я исправил свой ответ.
 Benjamin Lindley23 янв. 2011 г., 20:34
@ Omnifarious: я тоже. Я просто показывал способ, которым мог быть сделан актерский состав.

что значение является целым числом. Это, вероятно, не генерирует никакого дополнительного кода вообще. Вызов функции - это фактический вызов, который внутренне выполняет другую передачу типов. Умный компилятор оптимизирует это, поэтому они фактически одинаковы.

где вы его используете и как. Т.е. если у вас есть значения или указатели (или указатели указателей).

С c ++ вы должны читать * _cast <> и использовать их вместо этого.

е

Ваш ответ на вопрос