2013-02-23 112 views
2

我看到幾個網上的例子這表明的std ::複雜的變量,可以通過以下初始化:初始化的std ::複雜

std::complex<float> val(10, -2); 

但是,有沒有辦法做到像下面這樣:

std::complex<float> val; 
val.real = 10; 
val.imag = -2; 
+0

http://stdcxx.apache.org/doc/stdlibug/20-2.html – Gilad 2013-02-23 07:52:29

+0

gcc允許val.real()= 10作爲C++ 03模式的擴展,但不能用於C++ 11模式。正確的語法是val.real(10); val.imag(-2);. – 2013-02-23 07:55:55

+0

* reinterpret_cast (&val)= 10 and reinterpret_cast (&val)[1] = - 2也可以保證正常工作。 – 2013-02-23 08:02:46

回答

9

std::complex::realstd::complex::imag是實際上可以功能。他們可以通過提供值作爲參數來要麼返回實/虛部以及對其進行設置,但仍然使用函數調用語法:

std::complex<float> val; 
val.real(10); 
val.imag(-2); 

然而,這不叫初始化 。這會更改val的值,該值已在第一行代碼中初始化爲零。

實際上,你看到同樣的結果(即代碼之後,val擁有你希望它是值),但需要除非編譯器的一些更多的指令可以優化送人。由於std::complex是標準類型,因此編譯器很有可能會這樣做,但您無法確定。