使用complex
类和库,如何为变量分配复数?
我知道我可以在第一次实例化复数时设置该值 我也明白我可以将一个实例化的复数分配给另一个 如何直接为变量分配复数?
参考:
http://www.cplusplus.com/reference/complex/complex/operators/
示例:
#include <iostream>
#include <complex>
int main() {
complex<double> a(1.2,3.4), b;
cout << a; //-> (1.2,3.4)
b = a;
cout << b; //-> (1.2,3.4)
b = (1.2,3.4);
cout << b; //-> (3.4,0) <-- what the heck is this??
return 0;
}
答案 0 :(得分:9)
对于(1.2,3.4)
,将调用built-in comma operator。
在逗号表达式E1,E2中,表达式E1被评估,其结果被丢弃,并且在表达式E2开始评估之前完成其副作用(注意用户定义的运算符,不能保证排序)。 / p>
逗号表达式结果的类型,值和值类别正是第二个操作数E2的类型,值和值类别。如果E2是临时的,则表达式的结果是临时的。如果E2是位字段,则结果是位字段。
这意味着1.2
将被评估然后被丢弃,最后返回3.4
。
所以b = (1.2,3.4);
相当于b = 3.4;
,会调用std::complex::operator=(const T& x)
:
将
x
分配给复数的实部。虚部设置为零。
这就是为什么你得到(3.4,0)
的结果。
正如@paddy建议的那样,你可以解决如下问题:
b = {1.2,3.4}; // copy-list-initialization (since c++11)
b = complex<double>(1.2, 3.4); // copy assignment via a temporary complex<double>
b = decltype(b)(1.2, 3.4); // same as the above (since c++11)
答案 1 :(得分:6)
试试这个,您可以使用b={1.2, 3.4}
分配复杂值
#include <complex>
#include <iostream>
using namespace std;
int main()
{
complex<double> a = {1,2};
complex<double> b;
b = {1.2, 3.4};
cout << a + b << "\n"; // (2.2,5.4)
}
答案 2 :(得分:4)
您使用=
类的作业运算符std::complex
的方式仅指定了复数的real part
。
所以b = (1.2,3.4);
相当于仅将b
的实际部分更改为3.4
。
要直接指定复数,我认为您可以使用b = complex<double>(1.2,3.4);
答案 3 :(得分:1)
I just wanted to get in on the act with this bad boy, compliments of C++14:
#include <iostream>
#include <complex>
int main() {
using namespace std::literals;
std::complex<double> b;
b = 1.2 + 3.4i;
std::cout << b << "\n";
}