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ä:

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 */ 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:

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