ИМХО, вам лучше использовать их как классы просто потому, что это позволит вам писать код быстрее и с меньшим количеством ошибок.Вы должны выполнить измерения, чтобы увидеть, что работает лучше всего, если это важно для вас, но также убедитесь, что именно этот код является узким местом производительности.(Обязательно Цитата Дональда Кнута : «преждевременная оптимизация - корень всего зла»).
Большинство компиляторов очень хорошо справятся с оптимизацией кода для вас, я бы сказал.Чаще всего я обнаруживаю, что это нечто другое, чем эти вещи низкого уровня, которые имеют значение, например, добавление раннего теста или минимизация набора данных или еще много чего.
Для кватерниона вы все еще можете реализоватькласс, использующий массив изнутри (в случае, если он на самом деле быстрее), что должно сделать разницу еще менее важной.
Возможно, вам лучше обслуживать, например, убедившись, что вы можете запускать свои алгоритмы параллельно на многоядерных машинахили сделайте ваши фактические расчеты, используя инструкции SSE.