我的代碼是這樣的:的reinterpret_cast作爲dynamic_cast的
void some_func(void *source)
{
...
double *casted = reinterpret_cast<double *>(source);
...
}
這將導致std::__non_rtti_object
例外。根據堆棧跟蹤,它從__RTDynamicCast
提出,這是(據我所知)MSVC執行dynamic_cast。
這個異常應該發生在dynamic_cast上,因爲指針來自外部庫(可能編譯時沒有/ GR)並且指向具有多個雙精度的結構。但我不希望這與reinterpret_cast。它不應該只是改變指針的類型,根本沒有任何檢查?
注:
- 我的編譯器是msvc120(MS的Visual Studio 2013)
- 項目與/ GR(啓用運行時類型信息)
- 指針 「源」 編譯來自外部庫(編譯可能不帶/ GR)
- 我也具有相同的結果
似乎很奇怪,RTTI不應該影響'reinterpret_cast'。舊式C劇組會發生什麼(例如'(double *)source')? –
即使[這個問題](http://stackoverflow.com/questions/5582874/dynamic-cast-throws-pointer-is-not-std-non-rtti-object)處理從'dynamic_cast拋出的異常',OP的回答說問題是指針是'nullptr'。你確定'source!= nullptr'? – Praetorian
我不相信你已經向我們展示了足夠的代碼來確定問題。這看起來對我來說完全有效,即使你在投射一個空指針。 –