一定サイズの配列の内容をコピーしたいと思うことがよくあります。通常は、次の行に沿って何かを書くだけです。
float a[4] = {0,1,2,3};
float b[4];
for(int i=0; i<4; i++){
b[i]=a[i];
}
最近、私は教育目的で線形微積分ライブラリを作成していますが、それを行うためのより良い方法があるかどうか疑問に思っていました。
最初に頭に浮かんだのは、memcpy を使用することでした。
memcpy(b, a, sizeof(float) * 4);
しかし、これは非常にCに似ており、エラーが発生しやすいようです。私はコンパイル時にエラーが発生するのが好きです。これは、自明でないコピー コンストラクターを使用したデータ型の場合や、sizeof(datatype) で乗算するのを忘れた場合に醜くなる可能性があります。
集中的に使用する数学ライブラリを作成しているので、パフォーマンスは私にとって非常に重要です。今日のコンパイラは、最初の例が単にメモリのチャンクをコピーし、それを最適化して 2 番目のソリューションと同じくらい効率的であることを理解できるほど賢いでしょうか?
おそらく、標準ライブラリに私を助けることができる関数がありますか? C ++ 11で何か新しいことはありますか? それとも、マクロまたはテンプレート関数を作成する必要がありますか?