Eigen的记忆是如何形成的?

Pou*_*sen 0 c++ arguments eigen

我写过这个从文本文件中读取一些数字的小解析器.

    data.resize(7,datapoints); //Eigen::Matrix<float,7,-1> & data
    dst = data.data();

    while( fgets(buf,255,fp) != 0 && i/7 < datapoints)
    {

        int n = sscanf(buf,"%f \t%f \t%f \t%f \t%f \t%f \t%f",dst+i++, dst+i++,dst+i++,dst+i++,dst+i++,dst+i++,dst+i++);
            i = i - 7 * (n<=0);
    }
    fclose(fp);
    return !(datapoints == i/7);
Run Code Online (Sandbox Code Playgroud)

问题是,当我对数据执行std :: cout时,它会翻转.

数据在:

0   4   0.35763609  0.64077979  0   0   1
0   4   0.36267641  0.68243247  1   0   2
0   4   0.37477320  0.72945964  2   1   3
Run Code Online (Sandbox Code Playgroud)

data.col(3)是

0.64077979  
0.68243247  
0.72945964 
Run Code Online (Sandbox Code Playgroud)

和data.col(4)是

0.35763609  
0.36267641  
0.37477320 
Run Code Online (Sandbox Code Playgroud)

我无法看到为什么它将数据水平翻转的逻辑?

Mic*_*ild 6

为了说明问题:

#include <cstdio>

void f(int i, int j, int k)
{
  printf("i = %d\tj = %d\tk = %d\n", i, j, k);
}

int main()
{
  int i=0;
  f(i++, i++, i++);
}
Run Code Online (Sandbox Code Playgroud)

执行此操作,返回此处(关于Cygwin的g ++ 4.3.4):

i = 2   j = 1   k = 0
Run Code Online (Sandbox Code Playgroud)

i++函数调用内部调用的执行顺序完全是实现定义的(即任意).

  • 询问谷歌或看到这里:http://stackoverflow.com/questions/2934904/order-of-evaluation-in-c-function-parameters (2认同)