kmi*_*las 7 c++ variable-assignment complex-numbers
使用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;
}
Run Code Online (Sandbox Code Playgroud)
对于(1.2,3.4),将调用内置的逗号运算符.
在逗号表达式E1,E2中,评估表达式E1,丢弃其结果,并且在表达式E2的评估开始之前完成其副作用(注意用户定义的运算符,不能保证排序).
逗号表达式结果的类型,值和值类别正是第二个操作数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)
Run Code Online (Sandbox Code Playgroud)
试试这个,你可以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)
}
Run Code Online (Sandbox Code Playgroud)