Najczystszy sposób kopiowania tablicy o stałym rozmiarze w c ++ 11

Często chciałbym skopiować zawartość tablic o stałym rozmiarze, zwykle piszę coś na wzór:

float a[4] = {0,1,2,3};
float b[4];

for(int i=0; i<4; i++){
    b[i]=a[i];
}

Od niedawna piszę bibliotekę rachunku liniowego do celów edukacyjnych i zastanawiałem się, czy istnieje lepszy sposób, aby to zrobić.

Pierwszą rzeczą, która przyszła mi do głowy, było użycie memcpy:

memcpy(b, a, sizeof(float) * 4);

Ale wydaje mi się to bardzo podobne do błędów i błędów. Lubię mieć błędy w czasie kompilacji, a to może być brzydkie dla typów danych z nietrywialnymi konstruktorami kopii, lub jeśli zapomnę pomnożyć przez sizeof (typ danych).

Ponieważ piszę bibliotekę matematyczną, z której zamierzam korzystać intensywnie, wydajność jest dla mnie bardzo ważna. Czy kompilatory są dziś wystarczająco inteligentne, aby zrozumieć, że pierwszy przykład to po prostu skopiowanie fragmentu pamięci i zoptymalizowanie go, aby był tak wydajny, jak drugie rozwiązanie?

Może w standardowej bibliotece jest funkcja, która może mi pomóc? Coś nowego w c ++ 11? Czy powinienem po prostu utworzyć makro lub funkcję szablonu?

questionAnswers(5)

yourAnswerToTheQuestion