Нет. Динамическое приведение говорит компилятору: «Я вообще не хочу менять этот объект, я просто хочу попытаться посмотреть на него, как если бы это был другой тип, но не меняйте его. Если вам нужно изменить его , вернуть NULL или выдать исключение. " Динамическое приведение не будет пытаться выполнить какие-либо такие преобразования от вашего имени. Для этого вам нужно static_cast
или boost::lexical_cast
.
Это потому, что оператор приведения может:
- Переосмыслить существующий объект по-новому, не меняя его
- Изменить объект каким-либо образом, чтобы привести его к другому типу, например, int -> short или double -> int.
и один вызов может выполнить только один из них, но не оба.
Для получения дополнительной информации о «двойственной» природе оператора приведения вы можете увидеть эту статью Эрика Липперта , которая нацелена на C #, но в основном относится и к C ++.
В частности, вы можете увидеть § 5.2.7 в самой последней версии C ++ 0x - это поведение не изменилось по сравнению с C ++ 03.