2013-02-23 111 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是标准类型,因此编译器很有可能会这样做,但您无法确定。