我正在尝试将QVector
双数组的一部分分配给Qt中的复数双数组。
运行以下代码,我遇到std::cout << y.at(i) << std::endl;
正确打印16位整数值但std::cout << y1[i] << std::endl;
打印零的问题:(0,0)(0,0)(0,0) ......
我想要结果(y [0],0)(y [1],0)(y [2],0)...
请有人可以告知有什么问题吗?
QVector<double> x(100), y(100); // Original QVector
std::complex<double> y1[100];
int i=0;
while(i<101)
{
// get y values from somewhere else (quint8 data8)
y[i] = (256.0*data8[2*i]) + 1.0*data8[2*i+1];
std::cout << y.at(i) << std::endl;
y1[i] = (y.at(i),0.0);
std::cout << y1[i] << std::endl;
i++;
}
答案 0 :(得分:1)
让我们看看这个表达式:
(y.at(i), 0.0)
在C ++中,括号只是一种分组技术,用于运算符优先级指定。例如,如果您执行2*2+2
,您将获得六个。但是如果你想得到8,你需要括号:2*(2+2)
。所以你的分配线相当于:
y1[i] = y.at(i), 0.0;
为什么要编译它是什么意思?它编译是因为使用了comma operator。在C ++中,逗号是一个二元运算符,具有非常简单的操作:它计算它的左手参数,抛出结果,然后计算它的右手参数并返回结果。因此,在您的情况下,它丢弃y.at(i)
并返回零,已成功分配给y1[i]
。在现代C ++中执行所需操作的最短方法是使用初始化列表:
y1[i] = {y.at(i),0.0};
如果你有一个古老的编译器,它只是更冗长:
y1[i] = std::complex<double>(y.at(i), 0.0);