C++
Variabele declaratie trefwoorden
Zoeken…
const
Een typespecificatie; wanneer toegepast op een type, produceert de const-gekwalificeerde versie van het type. Zie const sleutelwoord voor details over de betekenis van const .
const int x = 123;
x = 456; // error
int& r = x; // error
struct S {
void f();
void g() const;
};
const S s;
s.f(); // error
s.g(); // OK
decltype
Levert het type operand op, dat niet wordt geëvalueerd.
Als de operand
eeen naam is zonder extra haakjes, is hetdecltype(e)het gedeclareerde typee.int x = 42; std::vector<decltype(x)> v(100, x); // v is a vector<int>Als de operand
eis tot eendecltype(e)zonder extra haakjes, isdecltype(e)het gedeclareerde type van het benaderde lid.struct S { int x = 42; }; const S s; decltype(s.x) y; // y has type int, even though s.x is constIn alle andere gevallen
decltype(e)levert het type en de waarde categorie van de expressieeals volgt:- Als
eeen waarde van het typeT, is hetdecltype(e)T&. - Als
eeen xwaarde van typeT, dan isdecltype(e)T&&. - Als
eeen waarde van het typeT, is hetdecltype(e)T
Dit omvat het geval met vreemde haakjes.
int f() { return 42; } int& g() { static int x = 42; return x; } int x = 42; decltype(f()) a = f(); // a has type int decltype(g()) b = g(); // b has type int& decltype((x)) c = x; // c has type int&, since x is an lvalue- Als
De speciale vorm decltype(auto) afleidt het type van een variabele uit haar initializer of de return type van een functie uit de return verklaringen in de definitie ervan, met behulp van het type aftrek regels van decltype in plaats van die van de auto .
const int x = 123;
auto y = x; // y has type int
decltype(auto) z = x; // z has type const int, the declared type of x
ondertekend
Een trefwoord dat deel uitmaakt van bepaalde integer typenamen.
- Wanneer alleen gebruikt, wordt
intgeïmpliceerd, zodatsigned,signed inteninthetzelfde type zijn. - In combinatie met
charlevert dit het typesigned char, dat een ander type is danchar, zelfs alscharook is ondertekend.signed charheeft een bereik dat minimaal -127 tot +127 omvat. - In combinatie met
short,longoflong longis het overbodig, omdat die typen al zijn ondertekend. -
signedkan niet worden gecombineerd metbool,wchar_t,char16_tofchar32_t.
Voorbeeld:
signed char celsius_temperature;
std::cin >> celsius_temperature;
if (celsius_temperature < -35) {
std::cout << "cold day, eh?\n";
}
ongetekend
Een typespecificatie die de niet-ondertekende versie van een geheel getal aanvraagt.
- Wanneer alleen gebruikt, wordt
intgeïmpliceerd, dusunsignedis hetzelfde type alsunsigned int. - Het type
unsigned charverschilt van het typechar, zelfs alscharis ondertekend. Het kan gehele getallen tot ten minste 255 bevatten. -
unsignedkan ook worden gecombineerd metshort,longoflong long. Het kan niet worden gecombineerd metbool,wchar_t,char16_tofchar32_t.
Voorbeeld:
char invert_case_table[256] = { ..., 'a', 'b', 'c', ..., 'A', 'B', 'C', ... };
char invert_case(char c) {
unsigned char index = c;
return invert_case_table[index];
// note: returning invert_case_table[c] directly does the
// wrong thing on implementations where char is a signed type
}
vluchtig
Een typeaanduiding; wanneer toegepast op een type, produceert het de vluchtig-gekwalificeerde versie van het type. Vluchtige kwalificatie speelt dezelfde rol als const kwalificatie in het type systeem, maar volatile belet niet dat objecten worden gewijzigd; in plaats daarvan dwingt het de compiler om alle toegangen tot dergelijke objecten als bijwerkingen te behandelen.
In het onderstaande voorbeeld, als memory_mapped_port niet vluchtig was, kon de compiler de functie optimaliseren zodat deze alleen de laatste schrijfactie uitvoert, wat onjuist zou zijn als sizeof(int) groter is dan 1. De volatile kwalificatie dwingt hem om alle sizeof(int) schrijft als verschillende bijwerkingen en voert ze dus allemaal (in volgorde) uit.
extern volatile char memory_mapped_port;
void write_to_device(int x) {
const char* p = reinterpret_cast<const char*>(&x);
for (int i = 0; i < sizeof(int); i++) {
memory_mapped_port = p[i];
}
}