Я часто обнаруживаю, что хочу скопировать содержимое массивов с постоянным размером, я обычно пишу что-то по строкам:
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 (тип данных).
Поскольку я пишу математическую библиотеку, которую я собираюсь использовать интенсивно, производительность очень важна для меня. Являются ли компиляторы сегодня достаточно умными, чтобы понять, что первый пример - просто копировать кусок памяти и оптимизировать его так же эффективно, как и второе решение?
Возможно, есть функция в стандартной библиотеке, которая может мне помочь? Что-то новое в С++ 11? Или я должен просто создать макрос или функцию шаблона?