Самый чистый способ скопировать массив постоянного размера в C ++ 11

Мне часто хочется скопировать содержимое массивов, которые имеют постоянный размер, я обычно просто пишу что-то вроде:

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);

Но это кажется очень с-подобным и подверженным ошибкам. Мне нравится иметь свои ошибки во время компиляции, и это может стать уродливым для типов данных с нетривиальными конструкторами копирования, или если я забуду умножить на sizeof (тип данных).

Поскольку я пишу математическую библиотеку, которую собираюсь интенсивно использовать, производительность очень важна для меня. Являются ли сегодня компиляторы достаточно умными, чтобы понять, что первый пример просто копирует кусок памяти, и оптимизировать его так же эффективно, как и второе решение?

Возможно, в стандартной библиотеке есть функция, которая может мне помочь? Что-то новое в C ++ 11? Или я должен просто создать макрос или функцию шаблона?

Ответы на вопрос(5)

Ваш ответ на вопрос