[英]Casting std::complex<double> as double
我想將std::complex<double>
的實部提取為double
。
std::complex<double> c = 1.0;
double *d = reinterpret_cast<double*>(c); // Want this to be = 1.0
下面給出了invalid cast from type 'std::complex<double>' to type 'double*'
的錯誤invalid cast from type 'std::complex<double>' to type 'double*'
。 有沒有關於如何做到這一點的例子?
double d = c.real();
在繼續使用之前最好閱讀 std::complex 的文檔:
您似乎想要一個指向 std::complex 實際元素的指針,但正試圖將復雜對象轉換為指針。 它們是完全不同的東西。 Reinterpret_cast 在沒有 UB 的情況下非常有限,但標准對std::complex
進行了例外檢查,如@Hajo 建議的那樣檢查 dox。
來自: https : //en.cppreference.com/w/cpp/numeric/complex
對於指向名為 p 的復數數組元素和任何有效數組索引 i 的任何指針,reinterpret_cast<T*>(p)[2*i] 是復數 p[i] 的實部,並且 ... .
您可以不使用[]
來執行此操作,因為不需要索引到數組中:
`double *d = reinterpret_cast<double*> (&c)`;
警告:雖然合法,但如果您更改值 *d 或 c 被更改,您可以進入 UB。 這樣做通常是個壞主意。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.