簡體   English   中英

鑄造 std::complex<double> 作為雙

[英]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 的文檔:

https://en.cppreference.com/w/cpp/numeric/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM