Что такое const
, когда вы объявляете формальный (функциональный) параметр «указатель типа» как «массив констант»?Что такое const, когда вы объявляете формальный (функциональный) параметр «тип указателя» как «массив констант»?
т.е .: Если T является идентификатор типа, то есть:
void f(const T arr[]);
эквивалент:
void f(const T * const arr);
или
void f(const T * arr);
или
void f(T * const arr);
И как можно расшифровать стандарты C/C++, чтобы найти эти эквиваленты? :-)
Существуют ли различия между C и C++ и между различными воплощениями стандартов относительно значения заявлений выше? (Для C - стандарты ANSI C89 и позже актуальны)
C11 draft standard n1570: * 6.7.6.3 Объявление функций (включая прототипы) 7 Объявление параметра как '' массив типа '' должно быть отрегулировано на '' квалифицированный указатель на type '', где квалификаторы типа (если есть) - это те, которые указаны в [и] вывода типа массива. * – EOF
Я не понимаю вопроса. Вы спрашиваете: «Что такое const?» Что состязание связано с этим? –
@ChristopherSchneider Хорошо - декларация 'const' обычно предоставляет ограничения доступа на запись к переменной или формальному параметру. Если переменная/формальная является указателем, вы можете либо защитить значение указателя, либо значение объекта, на который указывает, или и то, и другое. Формальные параметры, которые похожи на массивы, на самом деле являются указателями. Я спрашиваю, применяется ли объявление 'const' к значению указателя или к значениям указанного объекта (ов) или того и другого. –