Квалификаторы типа
Квалификатор типа (англ. type qualifier) — одно из зарезервированных слов const, volatile или restrict в языках программирования семейства Си.
Синтаксис
Квалификаторы типов используются в нескольких синтаксических контекстах:
- в составе последовательности : применяются к объявляемому типу. Например:
const int *p; /* const применяется к типу указываемого объекта */ - при : применяются к соответствующему указательному типу. Например:
int *restrict p; /* restrict применяется к типу указателя p */ - в объявлении функции-члена в Си++: применяются к соответствующему типу функции. Например:
class C { public: int f() const; /* const-квалифицированная функция-член */ }; Семантика
Квалификаторы типа применяются к типам (в Си и Си++) и (в Си++), влияя на семантику доступа к объектам, на которые ссылаются эти выражения:
const-квалифицированный тип l-выражения, а также const-квалифицированные поля структур и объединений в Си и классовых типов в Си++, являющихся типами l-выражений указывают на то, что такое l-выражение не является , и значит объект, на который оно ссылается не может быть модифицирован через это l-выражение операциями инкремента, декремента, или вызовом не-const-квалифицированной функции-члена. Например:
void f(const int *p) { *p = 0; /* ОШИБКА: *p является немодифицируемым l-выражением типа const int */ } - квалификация () функций-членов в Си++ означает, что левая часть операции доступа к функции-члену в операции вызова функции-члена должна иметь (в случае доступа с помощью операции
.) или указывать на (в случае доступа с помощью операции->) объектный тип, имеющий . Например:
class C { public: C(); int f() const; int g(); }; void f() { const C c; c.f(); /* OK: квалификации c и C::f() совпадают */ c.g(); /* ОШИБКА: квалификации c не достаточно для вызова C::g() */ } restrict-квалификация указателей в C99 означает, что указатели указывают на данные, которые не пересекаются в памяти (см. ). Эта информация позволяет компилятору безопасно применять некоторые специальные виды оптимизаций. Например, прототипы стандартных функцийmemcpyиmemmove, определенные в C99 отличаются:
#include <string.h> void *memcpy(void * restrict s1, /* копируемые области не должны пересекаться */ const void * restrict s2, size_t n); void *memmove(void *s1, /* копируемые области могут пересекаться */ const void *s2, size_t n); - ключевое слово
volatileуказывает на то, что объявленная таким образом переменная может измениться независимо от действий программы. Смысл использования квалификатора заключается в том, что компиляторы могут оптимизировать код, использующий переменную без учёта возможности её изменения в силу внешних условий.
См. также
В статье не хватает ссылок на источники (см. рекомендации по поиску). |
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Квалификаторы типа, Что такое Квалификаторы типа? Что означает Квалификаторы типа?
Kvalifikator tipa angl type qualifier odno iz zarezervirovannyh slov const volatile ili restrict v yazykah programmirovaniya semejstva Si SintaksisKvalifikatory tipov ispolzuyutsya v neskolkih sintaksicheskih kontekstah v sostave posledovatelnosti primenyayutsya k obyavlyaemomu tipu Naprimer const int p const primenyaetsya k tipu ukazyvaemogo obekta pri primenyayutsya k sootvetstvuyushemu ukazatelnomu tipu Naprimer int restrict p restrict primenyaetsya k tipu ukazatelya p v obyavlenii funkcii chlena v Si primenyayutsya k sootvetstvuyushemu tipu funkcii Naprimer class C public int f const const kvalificirovannaya funkciya chlen SemantikaKvalifikatory tipa primenyayutsya k tipam v Si i Si i v Si vliyaya na semantiku dostupa k obektam na kotorye ssylayutsya eti vyrazheniya const kvalificirovannyj tip l vyrazheniya a takzhe const kvalificirovannye polya struktur i obedinenij v Si i klassovyh tipov v Si yavlyayushihsya tipami l vyrazhenij ukazyvayut na to chto takoe l vyrazhenie ne yavlyaetsya i znachit obekt na kotoryj ono ssylaetsya ne mozhet byt modificirovan cherez eto l vyrazhenie operaciyami inkrementa dekrementa ili vyzovom ne const kvalificirovannoj funkcii chlena Naprimer void f const int p p 0 OShIBKA p yavlyaetsya nemodificiruemym l vyrazheniem tipa const int kvalifikaciya funkcij chlenov v Si oznachaet chto levaya chast operacii dostupa k funkcii chlenu v operacii vyzova funkcii chlena dolzhna imet v sluchae dostupa s pomoshyu operacii ili ukazyvat na v sluchae dostupa s pomoshyu operacii gt obektnyj tip imeyushij Naprimer class C public C int f const int g void f const C c c f OK kvalifikacii c i C f sovpadayut c g OShIBKA kvalifikacii c ne dostatochno dlya vyzova C g restrict kvalifikaciya ukazatelej v C99 oznachaet chto ukazateli ukazyvayut na dannye kotorye ne peresekayutsya v pamyati sm Eta informaciya pozvolyaet kompilyatoru bezopasno primenyat nekotorye specialnye vidy optimizacij Naprimer prototipy standartnyh funkcij memcpy i memmove opredelennye v C99 otlichayutsya include lt string h gt void memcpy void restrict s1 kopiruemye oblasti ne dolzhny peresekatsya const void restrict s2 size t n void memmove void s1 kopiruemye oblasti mogut peresekatsya const void s2 size t n klyuchevoe slovo volatile ukazyvaet na to chto obyavlennaya takim obrazom peremennaya mozhet izmenitsya nezavisimo ot dejstvij programmy Smysl ispolzovaniya kvalifikatora zaklyuchaetsya v tom chto kompilyatory mogut optimizirovat kod ispolzuyushij peremennuyu bez uchyota vozmozhnosti eyo izmeneniya v silu vneshnih uslovij Sm takzheKlassy pamyatiV state ne hvataet ssylok na istochniki sm rekomendacii po poisku Informaciya dolzhna byt proveryaema inache ona mozhet byt udalena Vy mozhete otredaktirovat statyu dobaviv ssylki na avtoritetnye istochniki v vide snosok 13 maya 2011
