Самый чистый способ скопировать массив постоянного размера в 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? Или я должен просто создать макрос или функцию шаблона?