__restrict в g++ и MSVC с синтаксисом массива
Я в процессе обновления критичных для производительности библиотек для использования restrict
, как реализовано в C++11 g++ и MSVC с ключевым словом __restrict
,
Есть много подпрограмм и функций, которые выглядят примерно так:
void f(float a[],float b[]);
В приведенном выше примере f
это процедура, аргументы которой должны быть ограничены. К сожалению, насколько я могу судить, это невозможно при сохранении этого синтаксиса. Теперь ясно, что это можно переписать, используя указатели как:
void f(float*__restrict a,float*__restrict b);
Что здесь потеряно, так это семантический факт a
а также b
являются массивами (я предпочитаю использовать нотацию указателя для однозначных указателей и нотацию массива для указателей массива). Описательные имена аргументов (опущены выше) помогают, но только так.
Я хотел бы подтвердить, что объявление ограниченных переменных с использованием синтаксиса массива в настоящее время невозможно для этих компиляторов.