I often find myself wanting to copy the contents of arrays that have a constant size, I usually just write something along the lines of:
float a[4] = {0,1,2,3};
float b[4];
for(int i=0; i<4; i++){
b[i]=a[i];
}
As of lately, I am writing a linear calculus library for educational purposes, and I was wondering if there was a better way to do it.
The first thing that came to my mind, was using memcpy:
memcpy(b, a, sizeof(float) * 4);
But this seems very c-like and error prone to me. I like having my errors at compile time, and this can get ugly for data types with non-trivial copy constructors, or if I forget to multiply with sizeof(datatype).
Since I am writing a math library that I am going to use intensively, performance is very important to me. Are the compilers today smart enough to understand that the first example is just copying a chunk of memory and optimize it to be as efficient as the second solution?
Perhaps there is a function in the standard library that can help me? Something new in c++11? Or should I just create a macro or a template function?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…