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