Typ kval
Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från
versionen som granskades den 6 februari 2018; kontroller kräver
3 redigeringar .
Typkvalificeraren är ett av de reserverade orden , eller i programmeringsspråken i C - familjen .
constvolatilerestrict
Syntax
Typkvalificerare används i flera syntaktiska sammanhang:
- som en del av en sekvens av deklarationsspecifikationer : tillämpas på den deklarerade typen. Till exempel:
const int * p ; /* const gäller typen av det spetsiga objektet */
- när du definierar en pekare : tillämpas på motsvarande pekartyp. Till exempel:
int * begränsa p ; /* limit gäller för pekartyp p */
klass C {
offentliga :
int f () const ; /* konstkvalificerad medlemsfunktion */
};
Semantik
Typkvalificerare tillämpas på typerna av l-uttryck (i C och C++) och r-uttryck av klasstyper (i C++), vilket påverkar åtkomstsemantiken för objekten som dessa uttryck refererar till:
- const-kvalificerad typ av ett l-uttryck, såväl som konstkvalificerade fält av strukturer och fackföreningar i C och datamedlemmar av klasstyper i C++ som är typer av l-uttryck indikerar att ett sådant l-uttryck inte är ett modifierbart l- expression , och därför kan objektet det refererar till inte modifieras genom det l-uttrycket genom inkrement , dekrement , tilldelningsoperationer eller genom anrop av en okvalificerad constmedlemsfunktion. Till exempel:
void f ( const int * p )
{
* p = 0 ; /* FEL: *p är ett omodifierbart l-uttryck av typen const int */
}
- kvalificering ( CV-kvalificering ) av medlemsfunktioner i C++ innebär att den vänstra sidan av medlemsfunktionsåtkomstoperationen i medlemsfunktionsanropsoperationen måste ha (vid åtkomst med hjälp av operationen .) eller peka på (vid åtkomst med hjälp av operationen ->) en objekttyp som inte är mer kvalificerad än . Till exempel:
klass C {
offentliga :
C ();
int f () const ;
intg ( );
};
ogiltig f ()
{
konst Cc ; _
c . f (); /* OK: kvalifikationerna för c och C::f() matchar */
c . g (); /* FEL: kvalifikation c räcker inte för att anropa C::g() */
}
- restrict-kvalificeringen av pekare i C99 innebär att pekare pekar på data som inte överlappar i minnet (se överlappande objekt ). Denna information gör det möjligt för kompilatorn att på ett säkert sätt tillämpa vissa speciella typer av optimeringar. Till exempel är standardfunktionsprototyperna memcpyoch memmovedefinierade i C99 olika:
#include <string.h>
void * memcpy ( void * limit s1 , /* kopierade områden får inte överlappa */
const void * limit s2 , size_t n );
void * memmove ( void * s1 , /* kopierade områden kan överlappa */
const void * s2 , size_t n );
- nyckelordet volatileindikerar att variabeln som deklareras på detta sätt kan ändras oberoende av programmets åtgärder. Poängen med att använda en qualifier är att kompilatorer kan optimera kod som använder en variabel utan att ta hänsyn till möjligheten att ändra den på grund av yttre förhållanden.
Se även