Tyyppitunnisteet
Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 6. helmikuuta 2018 tarkistetusta
versiosta . tarkastukset vaativat
3 muokkausta .
Tyyppitunniste on yksi varatuista sanoista tai C - perheen ohjelmointikielissä .
_ _ constvolatilerestrict
Syntaksi
Tyyppimääritteitä käytetään useissa syntaktisissa yhteyksissä:
- osana ilmoitusmääritteiden sarjaa : sovelletaan ilmoitettuun tyyppiin. Esimerkiksi:
const int * p ; /* const koskee terävän objektin tyyppiä */
- kun määrität osoitinta : käytä vastaavaa osoitintyyppiä. Esimerkiksi:
int * rajoittaa p ; /* rajoitus koskee osoitintyyppiä p */
- jäsenfunktion määrittelyssä C++ : ssa : sovelletaan vastaavaan funktiotyyppiin. Esimerkiksi:
luokka C {
julkinen :
int f () const ; /* vakituinen jäsentoiminto */
};
Semantiikka
Tyyppitunnisteita käytetään l-lausekkeiden tyypeille (C ja C++) ja luokkatyyppien r-lausekkeille (C++), jotka vaikuttavat näiden lausekkeiden viittaamien
objektien käyttösemantiikkaan:
- const-L-lausekkeen pätevä tyyppi, samoin kuin C :n rakenteiden ja liittojen const-hyväksytyt kentät ja C++: n luokkatyyppien datajäsenet, jotka ovat l-lausekkeiden tyyppejä, osoittavat, että tällainen l-lauseke ei ole muokattava l- lauseke , joten objektia, johon se viittaa, ei voida muokata tuon l-lausekkeen kautta lisäämällä , vähentämällä , osoitusoperaatioilla tai kutsumalla ei- kelpoista jäsenfunktiota. Esimerkiksi:const
void f ( const int * p )
{
* p = 0 ; /* VIRHE: *p on muokkaamaton l-lauseke, jonka tyyppi on const int */
}
- jäsentoimintojen hyväksyntä ( CV - pätevyys ) C++:ssa tarkoittaa, että jäsenfunktion käyttöoikeusoperaation vasemmalla puolella jäsenfunktion kutsuoperaatiossa on oltava (jos pääsy käytetään operaatiota .) tai point to (jos pääsy on operaatio ->) objektityyppi, joka ei ole tarkempi kuin . Esimerkiksi:
luokka C {
julkinen :
C ();
int f () const ;
intg ( );
};
tyhjä f ()
{
vakio C c ;
c . f (); /* OK: c:n ja C::f():n kelpoisuus täsmää */
c . g (); /* VIRHE: pätevyys c ei riitä kutsumaan C::g() */
}
- restrictOsoittimien -tarkistus C99 :ssä tarkoittaa, että osoittimet osoittavat dataan, joka ei mene päällekkäin muistissa (katso päällekkäiset objektit ). Näiden tietojen avulla kääntäjä voi turvallisesti soveltaa tiettyjä erityisiä optimointeja. Esimerkiksi C99:ssä määritellyt vakiotoimintojen prototyypit memcpyovat memmoveerilaisia:
#include <string.h>
void * memcpy ( void * rajoittaa s1 , /* kopioidut alueet eivät saa mennä päällekkäin */
const void * rajoittaa s2 , koko_t n );
void * memmove ( void * s1 , /* kopioidut alueet voivat mennä päällekkäin */
const void * s2 , koko_t n );
- avainsana volatileosoittaa, että tällä tavalla ilmoitettu muuttuja voi muuttua ohjelman toiminnoista riippumatta. Tarkenteen käytön tarkoitus on, että kääntäjät voivat optimoida muuttujaa käyttävän koodin ottamatta huomioon mahdollisuutta muuttaa sitä ulkoisten olosuhteiden vuoksi.
Katso myös