__restrict в g++ и MSVC с синтаксисом массива

Я нахожусь в процессе обновления критически важных для производительности библиотек для использования restrict, как это реализовано в С++ 11 с помощью g++ и MSVC с ключевым словом __restrict.

Есть много подпрограмм и функций, которые выглядят примерно так:

void f(float a[],float b[]);

В приведенном выше примере f — это процедура, аргументы которой должны быть ограничены. К сожалению, насколько я могу судить, это невозможно при сохранении этого синтаксиса. Теперь ясно, что это можно переписать с помощью указателей как:

void f(float*__restrict a,float*__restrict b);

Что здесь упущено, так это семантический факт, что a и b являются массивами (я предпочитаю использовать нотацию указателя для указателей с одним значением и нотацию массива для указателей на массивы). Описательные имена аргументов (опущенные выше) помогают, но не более того.

Я хотел бы подтвердить, что в настоящее время для этих компиляторов невозможно объявление ограниченных переменных с использованием синтаксиса массива.


person imallett    schedule 19.09.2014    source источник
comment
Вы по-прежнему можете использовать using float_array = float[];, а затем void f(float_array __restrict a, float_array __restrict b);   -  person Jarod42    schedule 19.09.2014
comment
@Jarod42, спасибо за это; слишком громоздко, на мой вкус, к сожалению.   -  person imallett    schedule 19.09.2014