我正在尝试将QVector双精度数组的一部分赋值给Qt中的复杂双精度数组。
运行以下代码时,我遇到了这样的问题:std::cout << y.at(i) << std::endl;正确地打印了一个16位的整数值,而std::cout << y1[i] << std::endl;却打印了0:(0,0) (0,0) (0,0) ...
我想要结果(y,0) (y1,0) (y2,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++;
}发布于 2016-11-16 20:03:24
让我们看一下这个表达式:
(y.at(i), 0.0)在C++中,括号只是一种分组技术,用于指定运算符的优先顺序。例如,如果执行2*2+2,就会得到6个。但是如果你想得到8个,你需要用括号:2*(2+2)。所以你的赋值行相当于:
y1[i] = y.at(i), 0.0;为什么要编译它?它的含义是什么?它之所以会编译,是因为使用了comma operator。在C++中,逗号是一个二元运算符,具有非常简单的操作:它计算左边的参数,丢弃结果,然后计算右边的参数并返回结果。因此,在您的例子中,它丢弃了y.at(i)并返回0,这被成功地分配给了y1[i]。在现代C++中做你想做的事情的最快捷的方法是使用初始化器列表:
y1[i] = {y.at(i),0.0};如果你有一个古老的编译器,它只是有点冗长:
y1[i] = std::complex<double>(y.at(i), 0.0);https://stackoverflow.com/questions/40631422
复制相似问题