__m128, __m128d, __m256 и т.д. встроенные типы в С++?

Вопрос:Стандарты С++ различают встроенные типы и типы struct или class. Для последнего разрешено перегружать операторы, такие как +, *= или &, но не для встроенных типов, когда соответствующие операторы предоставляются языком. AFAIK, типы SSE/AVX не упоминаются в стандарте (но, пожалуйста, исправьте меня), поэтому вы должны иметь возможность объявлять этих операторов. GCC не позволяет этого, но

Вопрос:

Стандарты С++ различают встроенные типы и типы struct или class. Для последнего разрешено перегружать операторы, такие как +, *= или &, но не для встроенных типов, когда соответствующие операторы предоставляются языком. AFAIK, типы SSE/AVX не упоминаются в стандарте (но, пожалуйста, исправьте меня), поэтому вы должны иметь возможность объявлять этих операторов. GCC не позволяет этого, но ICC делает. Какой из них правильный?

Я действительно хотел бы иметь побитовые операции (например, &=), но, досадно, GCC не предоставляет их (для __m128) и не позволяет объявить их.

Лучший ответ:

Все верно. Эти типы являются расширениями для С++, а не встроенными (почти ничего не встроенное в С++ начинается с подчеркивания). Поскольку они являются расширениями, реализация может налагать любые ограничения на них, которые она хочет.

Ответ №1

Они не встроены. С++ не зависит от конкретных особенностей архитектуры HW.

Оцените статью
Добавить комментарий